← CS Lab Databases & Data Modeling / SQL SELECT & WHERE Open standalone ↗

SELECT chooses columns, WHERE filters rows. Together they answer "which fields, from which records?" — the slider and the live query above show the result set shrink as you tighten the filter.

Where you meet it

What it does

SELECT is the projection — it picks which columns come out. WHERE is the filter — it tests every row against a condition and keeps only the ones where that condition is true. Naming columns instead of SELECT * means you fetch only what you need.

SQL reads top to bottom, but runs FROM → WHERE → SELECT → ORDER BY → LIMIT — which is why LIMIT only bites after the sort.

How it works

The WHERE condition is a predicate: an expression that is true, false, or unknown for each row. The row survives only when the predicate is true. Combine predicates with AND (both must hold) and OR (either holds); AND binds tighter than OR, so use parentheses when mixing them.

SELECT id, name, country
FROM users
WHERE age > 30 AND country = 'DE';

The engine doesn't run the clauses top to bottom. The logical order is FROM → WHERE → SELECT → ORDER BY → LIMIT: it gathers the table, drops rows that fail the filter, projects the chosen columns, sorts, and only then cuts to the limit — which is why LIMIT takes the first rows after sorting.

Watch out

  • NULL is not a value you can = against. age = NULL yields unknown, never true, so the row is dropped. Use age IS NULL / IS NOT NULL instead.
  • Without ORDER BY, row order is not guaranteed — so LIMIT without a sort returns an arbitrary slice.
  • AND/OR mixed without parentheses bites: a OR b AND c means a OR (b AND c).

Go deeper

SELECT wählt Spalten, WHERE filtert Zeilen. Zusammen beantworten sie "welche Felder, aus welchen Datensätzen?" — der Slider und die Live-Query oben zeigen, wie die Ergebnismenge schrumpft, je enger du filterst.

Wo es vorkommt

Was es tut

SELECT ist die Projektion — es bestimmt, welche Spalten herauskommen. WHERE ist der Filter — es prüft jede Zeile gegen eine Bedingung und behält nur die, bei denen sie wahr ist. Spalten zu benennen statt SELECT * holt nur das Nötige.

SQL liest von oben nach unten, läuft aber FROM → WHERE → SELECT → ORDER BY → LIMIT — darum greift LIMIT erst nach dem Sortieren.

Wie es funktioniert

Die WHERE-Bedingung ist ein Prädikat: ein Ausdruck, der pro Zeile wahr, falsch oder unbekannt ist. Die Zeile bleibt nur, wenn das Prädikat wahr ist. Prädikate kombinierst du mit AND (beide müssen gelten) und OR (eines genügt); AND bindet stärker als OR, also bei Mischung Klammern setzen.

SELECT id, name, country
FROM users
WHERE age > 30 AND country = 'DE';

Die Engine läuft die Klauseln nicht von oben nach unten ab. Die logische Reihenfolge ist FROM → WHERE → SELECT → ORDER BY → LIMIT: erst die Tabelle holen, dann Zeilen verwerfen, die den Filter nicht bestehen, die gewählten Spalten projizieren, sortieren und erst dann auf das Limit kürzen — darum nimmt LIMIT die ersten Zeilen nach dem Sortieren.

Worauf achten

  • NULL ist kein Wert, gegen den du mit = vergleichen kannst. age = NULL ergibt unbekannt, nie wahr — die Zeile fliegt raus. Nimm stattdessen age IS NULL / IS NOT NULL.
  • Ohne ORDER BY ist die Zeilenreihenfolge nicht garantiertLIMIT ohne Sortierung liefert also einen beliebigen Ausschnitt.
  • AND/OR ohne Klammern beißt: a OR b AND c bedeutet a OR (b AND c).

Mehr dazu

Next up
Databases & Data ModelingSQL GROUP BY & Aggregation Databases & Data ModelingSQL JOINs All concepts →