SQL DQL

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:

Hier versteckt sich noch mehr!
Besuche die App um alle Inhalte zu sehen!
\underline{\text{PersonenID}}PersonenID\underline{\text{PersonenID}}
\text{Vorname}Vorname\text{Vorname}
\text{Nachname}Nachname\text{Nachname}
\text{Alter}Alter\text{Alter}
\text{1}1\text{1}
\text{Leon}Leon\text{Leon}
\text{Maier}Maier\text{Maier}
\text{18}18\text{18}
\text{2}2\text{2}
\text{Emma}Emma\text{Emma}
\text{Maier}Maier\text{Maier}
\text{16}16\text{16}
\text{3}3\text{3}
\text{Max}Max\text{Max}
\text{Mustermann}Mustermann\text{Mustermann}
\text{25}25\text{25}
\text{4}4\text{4}
\text{Amir}Amir\text{Amir}
\text{Schneider}Schneider\text{Schneider}
\text{17}17\text{17}

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 ...

Hier versteckt sich noch mehr!
Besuche die App um alle Inhalte zu sehen!

... gibt alle Tupel zurück, deren Nachname 'Maier' ist:

\underline{\text{PersonenID}}PersonenID\underline{\text{PersonenID}}
\text{Vorname}Vorname\text{Vorname}
\text{Nachname}Nachname\text{Nachname}
\text{Alter}Alter\text{Alter}
\text{1}1\text{1}
\text{Leon}Leon\text{Leon}
\text{Maier}Maier\text{Maier}
\text{18}18\text{18}
\text{2}2\text{2}
\text{Emma}Emma\text{Emma}
\text{Maier}Maier\text{Maier}
\text{16}16\text{16}

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:

Hier versteckt sich noch mehr!
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:

\underline{\text{PersonenID}}PersonenID\underline{\text{PersonenID}}
\text{Vorname}Vorname\text{Vorname}
\text{Nachname}Nachname\text{Nachname}
\text{Alter}Alter\text{Alter}
\text{3}3\text{3}
\text{Max}Max\text{Max}
\text{Mustermann}Mustermann\text{Mustermann}
\text{25}25\text{25}

SELECT DISTINCT

Aus der Tabelle Personen sollen nun alle verschiedenen Nachnamen ausgegeben werden. Es liegt nahe, dies mit folgender SQL-Anweisung zu lösen:

Hier versteckt sich noch mehr!
Besuche die App um alle Inhalte zu sehen!

Diese Anweisung liefert folgendes Ergebnis:

\text{Nachname}Nachname\text{Nachname}
\text{Maier}Maier\text{Maier}
\text{Maier}Maier\text{Maier}
\text{Mustermann}Mustermann\text{Mustermann}
\text{Schneider}Schneider\text{Schneider}

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:

Hier versteckt sich noch mehr!
Besuche die App um alle Inhalte zu sehen!

Du erhältst nun folgende Rückgabe:

\text{Nachname}Nachname\text{Nachname}
\text{Maier}Maier\text{Maier}
\text{Mustermann}Mustermann\text{Mustermann}
\text{Schneider}Schneider\text{Schneider}

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:

Hier versteckt sich noch mehr!
Besuche die App um alle Inhalte zu sehen!

Das Ergebnis der Abfrage ist:

\text{3}3\text{3}

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):

Hier versteckt sich noch mehr!
Besuche die App um alle Inhalte zu sehen!
\underline{\text{PersonenID}}PersonenID\underline{\text{PersonenID}}
\text{Vorname}Vorname\text{Vorname}
\text{Nachname}Nachname\text{Nachname}
\text{Alter}Alter\text{Alter}
\text{2}2\text{2}
\text{Emma}Emma\text{Emma}
\text{Maier}Maier\text{Maier}
\text{16}16\text{16}
\text{4}4\text{4}
\text{Amir}Amir\text{Amir}
\text{Schneider}Schneider\text{Schneider}
\text{17}17\text{17}
\text{1}1\text{1}
\text{Leon}Leon\text{Leon}
\text{Maier}Maier\text{Maier}
\text{18}18\text{18}

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:

Hier versteckt sich noch mehr!
Besuche die App um alle Inhalte zu sehen!
\underline{\text{PersonenID}}PersonenID\underline{\text{PersonenID}}
\text{Nachname}Nachname\text{Nachname}
\text{2}2\text{2}
\text{Maier}Maier\text{Maier}
\text{1}1\text{1}
\text{Mustermann}Mustermann\text{Mustermann}
\text{1}1\text{1}
\text{Schneider}Schneider\text{Schneider}

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:

\underline{\text{StadtID}}StadtID\underline{\text{StadtID}}
\text{Name}Name\text{Name}
\text{Einwohnerzahl}Einwohnerzahl\text{Einwohnerzahl}
\text{Land}Land\text{Land}
\text{1}1\text{1}
\text{Berlin}Berlin\text{Berlin}
\text{3.600.000}3.600.000\text{3.600.000}
\text{Deutschland}Deutschland\text{Deutschland}
\text{2}2\text{2}
\text{Paris}Paris\text{Paris}
\text{12.000.000}12.000.000\text{12.000.000}
\text{Frankreich}Frankreich\text{Frankreich}
\text{3}3\text{3}
\text{London}London\text{London}
\text{8.900.000}8.900.000\text{8.900.000}
\text{England}England\text{England}
\text{4}4\text{4}
\text{Hamburg}Hamburg\text{Hamburg}
\text{1.800.000}1.800.000\text{1.800.000}
\text{Deutschland}Deutschland\text{Deutschland}
\text{5}5\text{5}
\text{Regensburg}Regensburg\text{Regensburg}
\text{152.000}152.000\text{152.000}
\text{Deutschland}Deutschland\text{Deutschland}
\text{6}6\text{6}
\text{Marseille}Marseille\text{Marseille}
\text{861.000}861.000\text{861.000}
\text{Frankreich}Frankreich\text{Frankreich}

WHERE Abfrage

Zunächst sollen die Namen und IDs aller französischen Städte ausgeben werden:

Hier versteckt sich noch mehr!
Besuche die App um alle Inhalte zu sehen!
\text{Name}Name\text{Name}
\underline{\text{StadtID}}StadtID\underline{\text{StadtID}}
\text{Paris}Paris\text{Paris}
\text{2}2\text{2}
\text{Marseille}Marseille\text{Marseille}
\text{6}6\text{6}

ORDER BY

Es sollen Namen und Einwohnerzahl aller Städte zurückgegeben werden, welche mehr als eine Millionen Einwohner haben, absteigend geordnet nach Einwohnerzahl:

Hier versteckt sich noch mehr!
Besuche die App um alle Inhalte zu sehen!
\text{Name}Name\text{Name}
\text{Einwohnerzahl}Einwohnerzahl\text{Einwohnerzahl}
\text{Paris}Paris\text{Paris}
\text{12.000.000}12.000.000\text{12.000.000}
\text{London}London\text{London}
\text{8.900.000}8.900.000\text{8.900.000}
\text{Berlin}Berlin\text{Berlin}
\text{3.600.000}3.600.000\text{3.600.000}
\text{Hamburg}Hamburg\text{Hamburg}
\text{1.800.000}1.800.000\text{1.800.000}

SUM

Es soll die Summe der Einwohner der deutschen Städte aus der Tabelle Staedte ausgegeben werden:

Hier versteckt sich noch mehr!
Besuche die App um alle Inhalte zu sehen!
\text{5.552.000}5.552.000\text{5.552.000}

COUNT

Es soll zurückgegeben werden, wie viele Städte von welchem Land in der Tabelle Staedte vorhanden sind, aufsteigend nach Anzahl geordnet:

Hier versteckt sich noch mehr!
Besuche die App um alle Inhalte zu sehen!
\text{Land}Land\text{Land}
\underline{\text{StadtID}}StadtID\underline{\text{StadtID}}
\text{England}England\text{England}
\text{1}1\text{1}
\text{Frankreich}Frankreich\text{Frankreich}
\text{2}2\text{2}
\text{Deutschland}Deutschland\text{Deutschland}
\text{3}3\text{3}
Next topic:
SQL Joins

Continue
SQL Joins

Jetzt unlimited holen!

Mit simpleclub unlimited bekommst du Vollzugang zur App: Du boostest deine Noten, hast mehr Freizeit und gehst sicher in jede Klausur!

Jetzt unlimited holen

Jetzt simpleclub Azubi holen!

Mit simpleclub Azubi bekommst du Vollzugang zur App: Wir bereiten dich in deiner Ausbildung optimal auf deine Prüfungen in der Berufsschule vor. Von Ausbilder*innen empfohlen.

Jetzt simpleclub Azubi holen