Die Data Query Language (DQL) umfasst alle Befehle in SQL, die zur Abfrage von Daten und Datensätzen in der Datenbank genutzt werden.
Erklärung
Damit Daten nicht nur in die Datenbank eingetragen werden und dort für ewig verweilen, kannst du mit SQL DQL die Daten aus der Datenbank wieder abfragen. Die Abfrage von Datensätzen ist sogar die Hauptaufgabe von SQL! Dabei werden jedoch nur ganz selten alle Daten abgefragt. Daher bietet dir SQL die Möglichkeit, Bedingungen zu definieren. So erhältst du nur die Daten, die deine Bedingungen erfüllen. Und das Beste: SQL erledigt die Auswertung für dich! Du musst also nicht von Hand ein paar tausend Seiten Tabellen durchsuchen.
SELECT FROM
Die Grundlage einer SQL Anfrage ist SELECT FROM. Diese zwei magischen Worte erlauben dir, einfache Abfragen für deine Datenbank zu schreiben.
Im Vorfeld wurde bereits die Tabelle Personen angelegt und mit ein paar Datensätzen befüllt. In der ersten Anfrage lässt du dir von SQL einfach die ganze Tabelle Personen ausgeben.
Dazu verwendest du die folgende SQL Anweisung:
Besuche die App, um alle Inhalte zu sehen!
Dabei werden hinter dem SELECT-Befehl die Attribute definiert, die ausgegeben werden sollen.
Der Stern hinter dem SELECT Statement der Anfrage bedeutet, dass alle Attribute der Tabelle ausgegeben werden. Du gibst dir so also alle Spalten der Tabelle aus, wie sie auch in der Datenbank vorhanden sind.
Hinter FROM wird die Tabelle definiert, aus welcher die definierten Attribute stammen sollen. In diesem Beispiel ist es die Tabelle Personen.
SELECT FROM WHERE
Mit dem Befehl WHERE kannst du zusätzliche Bedingungen definieren, welche die Datensätze erfüllen müssen. Der Befehl ...
Besuche die App, um alle Inhalte zu sehen!
... gibt alle Tupel zurück, deren Nachname 'Maier' ist:
NOT, AND und OR
Im WHERE-Teil der Abfrage kannst du mit Hilfe von den Modifikatoren AND, OR und NOT deine Abfrage weiter spezifizieren. Das sieht dann so aus:
Besuche die App, um alle Inhalte zu sehen!
Diese Abfrage gibt dir alle Tupel aus der Tabelle Personen zurück, die NICHT den Nachnamen Maier haben und über 18 Jahre alt sind. In diesem Fall ist das:
SELECT DISTINCT
Aus der Tabelle Personen sollen nun alle verschiedenen Nachnamen ausgegeben werden. Es liegt nahe, dies mit folgender SQL-Anweisung zu lösen:
Besuche die App, um alle Inhalte zu sehen!
Diese Anweisung liefert folgendes Ergebnis:
Wie dir sicher auffällt, kommt der Name Maier nun zwei Mal in der Liste vor. Das liegt daran, dass der obige SQL Befehl dir alle Attributwerte zurück gibt, die in der Tabelle vorkommen. Wenn du Duplikate vermeiden möchtest, dann kannst du den Zusatz DISTINCT hinter SELECT nutzen:
Besuche die App, um alle Inhalte zu sehen!
Du erhältst nun folgende Rückgabe:
COUNT, AVG, SUM, MIN und MAX
Wenn du vielleicht daran interessiert bist, wie alt alle Personen im Durchschnitt sind, oder wie viele verschiedenen Nachnamen es gibt, dann kannst du dafür die Zusätze COUNT, AVG, SUM, MIN und MAX nutzen:
- COUNT - Anzahl der Attributwerte
- AVG - Errechnet den Durchschnitt der Attributwerte
- SUM - Summe der Attributwerte
- MIN - Den kleinsten Attributwert
- MAX - Den größten Attributwert
Die Aufgabe ist es, die Anzahl der verschiedenen Nachnamen zu ermitteln. Die verschiedenen Nachnamen erhälst du mit DISTINCT. Jetzt ermöglicht COUNT es dir, die Anzahl der Attributwerte dieses Attributes zu ermitteln:
Besuche die App, um alle Inhalte zu sehen!
Das Ergebnis der Abfrage ist:
ORDER BY
Gerade bei größeren Tabellen sollen Ausgaben manchmal nach Attributwerten geordnet werden. Dies kannst du in SQL mit dem Befehl ORDER BY ganz am Ende deiner Abfrage umsetzen.
- ORDER BY ... ASC = Ausgabe wird aufsteigend geordnet
- ORDER BY ... DESC = Ausgabe wird absteigend geordnet
Der folgende Befehl gibt dir die Tupel der Tabelle Personen zurück, bei denen die Personen unter 20 Jahre alt sind (WHERE-Teil). Die Rückgabe wird nach dem Alter der Personen aufsteigend geordnet (ORDER BY-Teil):
Besuche die App, um alle Inhalte zu sehen!
GROUP BY
Der Befehl GROUP BY gruppiert Tupel nach ihren Attributwerten. Das bedeutet, dass alle Tupel mit demselben Attributwert zu einem Tupel zusammengefasst werden.
GROUP BY wird häufig mit COUNT verwendet, um z.B. die Anzahl an Personen zu bestimmen, die den jeweiligen Nachnamen haben:
Besuche die App, um alle Inhalte zu sehen!
Dabei befindet sich in der Spalte PersonenID bei dieser Abfrage NICHT die eigentliche PersonenID, sondern dank COUNT(PersonenID) die Anzahl an Personen, die den Nachnamen tragen, welcher in der Zeile rechts davon steht.
Beispiele
Die folgenden Beispiele beziehen sich auf die bereits in der Datenbank angelegten Tabelle Staedte. Es wurden auch schon einige Datensätze eingefügt:
WHERE Abfrage
Zunächst sollen die Namen und IDs aller französischen Städte ausgeben werden:
Besuche die App, um alle Inhalte zu sehen!
ORDER BY
Es sollen Namen und Einwohnerzahl aller Städte zurückgegeben werden, welche mehr als eine Millionen Einwohner haben, absteigend geordnet nach Einwohnerzahl:
Besuche die App, um alle Inhalte zu sehen!
SUM
Es soll die Summe der Einwohner der deutschen Städte aus der Tabelle Staedte ausgegeben werden:
Besuche die App, um alle Inhalte zu sehen!
COUNT
Es soll zurückgegeben werden, wie viele Städte von welchem Land in der Tabelle Staedte vorhanden sind, aufsteigend nach Anzahl geordnet:
Besuche die App, um alle Inhalte zu sehen!