SQL-Grundlagen: Daten mit SELECT abfragen
Kurzantwort
SELECT ist der wichtigste SQL-Befehl: Er liest Daten aus einer Tabelle. Mit SELECT wählst du die Spalten, mit FROM die Tabelle, mit WHERE filterst du Zeilen nach Bedingungen, mit ORDER BY sortierst du das Ergebnis und mit GROUP BY fasst du Zeilen für Auswertungen zusammen. Diese Bausteine decken den Großteil aller Abfragen ab.
Teil des Lernpfads Datenbanken und SQL · Schritt 4 von 9
Eine Datenbank nützt wenig, wenn man ihre Daten nicht gezielt herausbekommt. Genau dafür gibt es SQL – und der mit Abstand wichtigste Befehl ist SELECT. Wer ihn beherrscht, kann fast jede Frage an die Daten stellen.
Der Aufbau einer SELECT-Abfrage
Eine Abfrage liest sich fast wie ein Satz: „Wähle diese Spalten aus jener Tabelle, wo eine Bedingung gilt, sortiert nach …".
SELECT name, lehrjahr
FROM azubis
WHERE lehrjahr = 2
ORDER BY name;Filtern mit WHERE
WHERE schränkt die Zeilen ein. Bedingungen lassen sich mit Vergleichs- und Logikoperatoren kombinieren:
| Operator | Bedeutung | Beispiel |
|---|---|---|
= <> | gleich / ungleich | beruf = 'FIAE' |
< > <= >= | Vergleich | lehrjahr >= 2 |
AND OR | Verknüpfung | lehrjahr = 3 AND beruf = 'FISI' |
LIKE | Textmuster | name LIKE 'A%' (beginnt mit A) |
IN | Liste | beruf IN ('FIAE','FISI') |
IS NULL | leerer Wert | note IS NULL |
Sortieren und gruppieren
ORDER BY spalte ASC sortiert aufsteigend, DESC absteigend. GROUP BY fasst Zeilen mit gleichem Wert zusammen und wird mit Aggregatfunktionen ausgewertet:
SELECT beruf, COUNT(*) AS anzahl
FROM azubis
GROUP BY beruf;Die wichtigsten Aggregatfunktionen: COUNT, SUM, AVG, MIN, MAX.
Warum SELECT so mächtig ist
Selbstkontrolle
Selbstkontrolle
Du willst nur Gruppen anzeigen, die mehr als fünf Einträge haben. Welche Klausel nutzt du?
Häufige Fragen
Was ist der Unterschied zwischen WHERE und HAVING?
WHERE wird vor der Gruppierung ausgewertet und filtert einzelne Zeilen, kann also nicht auf Aggregatfunktionen zugreifen. HAVING wird nach dem GROUP BY ausgewertet und filtert die entstandenen Gruppen, etwa nach ihrer Anzahl oder Summe. In einer Abfrage können beide gemeinsam vorkommen.
Warum sollte man nicht immer SELECT * nehmen?
SELECT * holt alle Spalten, auch die, die du gar nicht brauchst. Das überträgt unnötig viele Daten, macht Abfragen langsamer und den Code unklarer, weil nicht ersichtlich ist, welche Felder wirklich verwendet werden. Zum schnellen Ausprobieren ist es praktisch, in produktivem Code benennt man die Spalten aber besser explizit.
Wie prüfe ich auf leere Werte?
Mit IS NULL beziehungsweise IS NOT NULL. NULL bedeutet „kein Wert" und ist nicht dasselbe wie 0 oder ein leerer Text. Ein Vergleich wie spalte = NULL liefert deshalb nie ein sinnvolles Ergebnis; korrekt ist WHERE spalte IS NULL.
Ist SQL bei jeder Datenbank gleich?
Der Kern – SELECT, WHERE, JOIN, GROUP BY – ist genormt und funktioniert überall sehr ähnlich. Bei Detailfunktionen, Datentypen oder String-Funktionen unterscheiden sich die Systeme (MySQL, PostgreSQL, SQL Server, Oracle) aber im Detail. Für die Ausbildung reicht der genormte Standard-Kern völlig aus.
Weiterlesen: Normalisierung: Datenbanken ohne Redundanz · ER-Modell erklärt: Entity-Relationship-Modell · Datenanalyse: von Rohdaten zur Erkenntnis
Das Wichtigste in Kürze
- SELECT liest Daten; Reihenfolge: SELECT → FROM → WHERE → GROUP BY → ORDER BY.
- WHERE filtert Zeilen; Operatoren wie
=,LIKE,IN,IS NULL. - ORDER BY sortiert (
ASC/DESC), GROUP BY gruppiert für Auswertungen. - Aggregatfunktionen:
COUNT,SUM,AVG,MIN,MAX. - WHERE filtert Zeilen, HAVING filtert Gruppen; NULL nur mit
IS NULLprüfen.