- 1 Section
- 10 Lessons
- unbegrenzt
- SQL Grundlagen10
- 1.1SQL-Grundstruktur: DDL, DML, DQL, DCL
- 1.2CREATE TABLE, Datentypen, Constraints
- 1.3INSERT, UPDATE, DELETE
- 1.4SELECT: WHERE, ORDER BY, LIMIT
- 1.5Aggregatfunktionen: COUNT, SUM, AVG
- 1.6GROUP BY und HAVING
- 1.7INNER JOIN und LEFT JOIN
- 1.8Datenbanktypen im Überblick
- 1.9MySQL / MariaDB in der Praxis
- 1.10SQL-Grundlagenaufgaben
SELECT: WHERE, ORDER BY, LIMIT
Mit INSERT, UPDATE, DELETE haben wir Daten hineingeschrieben und verändert. Jetzt der wichtigste Befehl überhaupt: SELECT. Er liest Daten aus der Datenbank – und macht in der Praxis weit über 80 % aller SQL-Operationen aus. Jede Webseite, jeder Bericht, jede Datenauswertung beginnt mit einem SELECT.
Die Grundform ist überraschend einfach. Aber SELECT bietet so viele Filterungs-, Sortier- und Begrenzungsmöglichkeiten, dass man Wochen damit zubringen kann. In dieser Lektion lernst du die vier wichtigsten Bausteine: SELECT … FROM … WHERE … ORDER BY … LIMIT. Damit beantwortest du 90 % aller Standard-Abfragen.
1) Die Grundstruktur
Jedes SELECT folgt diesem Muster, in dieser Reihenfolge:
SELECT spalte1, spalte2, ... -- welche Spalten FROM tabelle -- aus welcher Tabelle WHERE bedingung -- welche Zeilen ORDER BY spalte ASC|DESC -- Sortierung LIMIT n; -- maximale Anzahl
Pflicht sind nur die ersten zwei Zeilen: SELECT … FROM …. Alles andere ist optional. Aber gerade die optionalen Teile machen SELECT mächtig. Beispiel:
-- Die 5 teuersten Produkte aus Köln SELECT name, preis FROM produkt WHERE stadt = 'Köln' ORDER BY preis DESC LIMIT 5;
Lies das fast wie einen Satz: „Wähle Name und Preis aus der Produkttabelle, wo die Stadt Köln ist, sortiere absteigend nach Preis, gib nur 5 Zeilen zurück." Genau das ist die Magie von SQL – die deklarative Sprache liest sich oft wie ein englischer Satz.
2) Interaktiver Query-Builder
Spiel mit einer kleinen Beispiel-Datenbank von Kunden. Stelle die Auswahl, die Bedingung, die Sortierung und das Limit ein – die Query wird gebaut und sofort ausgeführt:
3) Die WHERE-Klausel im Detail
WHERE filtert Zeilen. Die wichtigsten Operatoren – die meisten kennst du aus der vorigen Lektion, aber bei SELECT spielen sie eine noch größere Rolle:
Vergleich
Gleich, ungleich, größer, kleiner.
WHERE preis >= 100
AND / OR / NOT
Logische Verknüpfung mehrerer Bedingungen.
WHERE stadt = 'Köln' AND aktiv = TRUE
BETWEEN
Wertebereich, beide Grenzen inklusiv.
WHERE preis BETWEEN 100 AND 500
IN
Mehrere mögliche Werte. Kürzer als viele ORs.
WHERE stadt IN ('Köln', 'Bonn', 'Aachen')
LIKE
Textmuster. % = beliebig viele Zeichen, _ = genau eins.
WHERE name LIKE 'Müller%'
IS NULL
NULL-Werte erkennen. Achtung: = NULL funktioniert nicht!
WHERE telefon IS NULL
WHERE a AND (b OR c) ist nicht dasselbe wie WHERE (a AND b) OR c. AND bindet stärker als OR – aber explizite Klammern machen die Absicht klar und vermeiden Bugs.4) LIKE-Muster – Texte unscharf suchen
LIKE ist das wichtigste Such-Werkzeug für Texte. Es kennt zwei Platzhalter: % für eine beliebige Zeichenfolge (auch leer), _ für genau ein Zeichen. Spiel mit dem Muster und sieh, welche Namen treffen:
'Müller%' findet alles, was mit „Müller" beginnt. '%GmbH' findet alles, was mit „GmbH" endet. '%GmbH%' findet „GmbH" überall im String. 'M_ller' findet „Müller" oder „Maller" (genau ein Zeichen zwischen M und l). LIKE ist meist case-insensitive in MySQL, aber case-sensitive in PostgreSQL – ein häufiger Stolperstein bei DBMS-Wechseln.5) ORDER BY – Reihenfolge bestimmen
SQL liefert Zeilen ohne ORDER BY in unvorhersehbarer Reihenfolge. Auch wenn sie meist „zufällig richtig" aussehen, darf man sich nicht darauf verlassen. Wer eine bestimmte Sortierung will, muss sie explizit fordern:
-- Aufsteigend (Standard) ORDER BY name -- ASC ist Default -- Absteigend ORDER BY preis DESC -- Mehrere Sortierkriterien (erst Stadt, dann Name) ORDER BY stadt ASC, name ASC -- Nach Spalten-Position (selten, aber erlaubt) ORDER BY 2 DESC -- nach der 2. SELECT-Spalte
Bei mehreren Kriterien wird zuerst nach dem ersten sortiert; bei Gleichstand nach dem zweiten, usw. ORDER BY stadt, name liefert alle Kunden gruppiert nach Stadt, innerhalb jeder Stadt alphabetisch nach Name. Sehr praktisch für Listenausdrucke.
6) LIMIT – Anzahl begrenzen
Bei großen Tabellen will man oft nur die ersten paar Zeilen. LIMIT begrenzt die Anzahl. Wichtig kombiniert mit ORDER BY – sonst weiß man nicht, welche „ersten" Zeilen man bekommt:
-- Top 10 nach Umsatz SELECT name, umsatz FROM kunde ORDER BY umsatz DESC LIMIT 10; -- Seitennummerierung: Zeile 21-30 (Skip 20, dann 10) SELECT name FROM kunde ORDER BY name LIMIT 10 OFFSET 20;
Die OFFSET-Klausel überspringt die ersten N Zeilen – Standard-Methode für Pagination („Seite 3 von 10"). Achtung: bei sehr großen Tabellen wird OFFSET langsam, weil das DBMS die übersprungenen Zeilen trotzdem lesen muss. Bessere Lösungen kommen in Datenbankindizes.
Hinweis zu Dialekten: LIMIT funktioniert in MySQL/PostgreSQL. SQL Server nutzt TOP n, Oracle früher ROWNUM <= n, neuere Versionen FETCH FIRST n ROWS ONLY. Standard-SQL ist FETCH FIRST n ROWS ONLY.
7) DISTINCT – Doppelte rauswerfen
Manchmal wiederholt sich ein Wert in den Ergebnissen, und du willst jeden nur einmal sehen. DISTINCT entfernt Duplikate:
-- Alle Städte, in denen wir Kunden haben (jede nur 1x) SELECT DISTINCT stadt FROM kunde; -- DISTINCT gilt für ALLE ausgewählten Spalten zusammen SELECT DISTINCT stadt, plz FROM kunde; -- Liefert (Köln,50667), (Köln,50825), (Berlin,10115), ...
Wichtig: DISTINCT wirkt auf die gesamte Zeile, nicht nur auf die erste Spalte. Beim zweiten Beispiel werden Zeilen unterschieden, sobald sich entweder Stadt oder PLZ unterscheidet – also kann „Köln" mehrfach auftauchen, wenn die PLZ unterschiedlich ist.
8) Die NULL-Falle
Die häufigste SQL-Verwechslung
NULL bedeutet „unbekannt" – nicht „leer" und nicht „null als Wert". Daher:
-- FALSCH: trifft NIE zu WHERE email = NULL -- RICHTIG WHERE email IS NULL WHERE email IS NOT NULL
Grund: NULL = NULL ist nicht TRUE und nicht FALSE, sondern UNKNOWN. WHERE filtert nur Zeilen mit TRUE durch – also kommt nichts zurück.
Genauso bei Arithmetik: 5 + NULL = NULL, CONCAT('a', NULL) = NULL. Wer das beachtet, vermeidet die Hälfte aller SQL-Bugs.
Eine elegante Hilfsfunktion: COALESCE liefert den ersten Wert, der nicht NULL ist. COALESCE(telefon, 'keine Angabe') gibt die Telefonnummer zurück, oder „keine Angabe", falls NULL.
9) Aliase mit AS – Spalten umbenennen
SELECT-Ergebnisse kannst du in der Ausgabe umbenennen. Das ist nützlich für lesbarere Berichte und für berechnete Spalten:
-- Spaltenalias mit AS SELECT name AS kundenname, preis * 1.19 AS brutto_preis FROM produkt; -- AS ist optional – Leerzeichen genügen SELECT name kundenname FROM kunde; -- Tabellen-Alias (wichtig für JOINs später) SELECT k.name FROM kunde AS k;
Tabellen-Aliase werden besonders wichtig bei JOINs, wo du mit mehreren Tabellen gleichzeitig arbeitest und Spaltennamen sonst doppeldeutig wären.
10) Die Reihenfolge der Klauseln – streng
Die Reihenfolge der SELECT-Klauseln ist festgelegt und kann nicht variieren. Vertauschen führt zu Syntaxfehlern:
| Reihenfolge | Klausel | Funktion |
|---|---|---|
| 1 | SELECT | Welche Spalten? |
| 2 | FROM | Aus welcher Tabelle? |
| 3 | WHERE | Welche Zeilen? (Filter auf Rohdaten) |
| 4 | GROUP BY | Gruppierung (siehe L06) |
| 5 | HAVING | Filter auf Gruppen |
| 6 | ORDER BY | Sortierung des Endergebnisses |
| 7 | LIMIT / OFFSET | Mengenbeschränkung |
Merksatz: SELECT – FROM – WHERE – GROUP – HAVING – ORDER – LIMIT. Diese sieben Wörter in genau dieser Reihenfolge. GROUP BY und HAVING kommen in der Lektion 6 dran – sie brauchen Aggregatfunktionen wie COUNT und SUM.
Zusammenfassung
SELECT ist der wichtigste SQL-Befehl – über 80 % aller Datenbankzugriffe sind SELECTs. Grundstruktur: SELECT spalten FROM tabelle WHERE bedingung ORDER BY spalte LIMIT n. Die WHERE-Klausel filtert Zeilen mit Operatoren wie =, <>, >, <, AND/OR/NOT, BETWEEN, IN, LIKE, IS NULL. LIKE nutzt % (beliebige Zeichen) und _ (genau eins) für Textmuster. ORDER BY sortiert das Ergebnis – Default ASC, DESC für absteigend, mehrere Kriterien kommagetrennt. LIMIT n OFFSET m begrenzt die Zeilenzahl (für Pagination). DISTINCT entfernt Duplikate (über die ganze Zeile, nicht eine Spalte). NULL ist die berühmteste SQL-Falle: = NULL trifft nie zu, immer IS NULL verwenden. AS gibt Spalten und Tabellen Aliase. Die Reihenfolge der Klauseln ist fest: SELECT–FROM–WHERE–GROUP–HAVING–ORDER–LIMIT.
Verwandte Lektionen: Aggregatfunktionen · GROUP BY und HAVING · JOINs Grundlagen · und mehrWeitere relevante LektionenSQL-GrundstrukturCREATE TABLEINSERT, UPDATE, DELETEUnterabfragenDatenbankindizesSQL-Injection vermeidenMySQL Praxis
