WHERE ist die Filter-Klausel von SQL: Sie legt fest, welche Zeilen eine Abfrage liefert. Ohne WHERE liefert SELECT alle Zeilen einer Tabelle – mit WHERE nur die, die eine Bedingung erfüllen.

Grundform

SELECT spalte1, spalte2
FROM tabelle
WHERE bedingung;

Die Bedingung wird für jede Zeile ausgewertet. Nur Zeilen, bei denen sie wahr ist, erscheinen im Ergebnis. Die WHERE-Klausel gehört zur SELECT-Abfrage und steht nach FROM – noch vor GROUP BY und HAVING.

Vergleichsoperatoren

  • = gleich, <> oder != ungleich
  • > größer, >= größer oder gleich
  • < kleiner, <= kleiner oder gleich
SELECT name, preis FROM produkte WHERE preis >= 10;

Logische Verknüpfungen

Mehrere Bedingungen lassen sich mit AND, OR und NOT verknüpfen. Wichtig: AND bindet stärker als OR – wer beides mischt, sollte Klammern setzen, sonst kommen still die falschen Zeilen zurück.

SELECT * FROM produkte
WHERE kategorie = 'Werkzeug' AND (preis < 50 OR rabatt = 1);

Wichtige Operatoren für Bedingungen

  • BETWEEN: Wertebereich inklusive Grenzen (auch für Datum und Text)
  • IN: Wert aus einer Liste – WHERE status IN ('offen', 'neu')
  • LIKE: Textmuster mit Platzhaltern – % für beliebig viele, _ für genau ein Zeichen; Sonderzeichen lassen sich mit ESCAPE schützen
  • IS NULL / IS NOT NULL: NULL kann man nicht mit = vergleichen – NULL ist „kein Wert“, nicht 0 oder leerer String
SELECT name FROM kunden WHERE name LIKE 'M%';

Logische Reihenfolge

SQL wertet nicht von oben nach unten aus: Zuerst filtert WHERE die Einzelzeilen, dann gruppiert GROUP BY, dann filtert HAVING die Gruppen. Deshalb dürfen in WHERE keine Aggregatfunktionen wie COUNT stehen – und auch keine Spalten-Aliase aus dem SELECT.

Die Reihenfolge der Ergebniszeilen bestimmt erst ORDER BY, die Anzahl der Zeilen begrenzt LIMIT. Auch UPDATE und DELETE nutzen WHERE, um nur bestimmte Zeilen zu ändern oder zu löschen.