SELECT & WHERE
M164 Block 1 von 5 — Daten lesen und filtern
DQL (Data Query Language) ist der Lese-Teil von SQL. Der einzige Befehl ist SELECT — er verändert nie Daten.

Grundstruktur einer SELECT-Abfrage

Jede Abfrage besteht mindestens aus SELECT und FROM. Alle anderen Klauseln sind optional.

SELECT spalte1, spalte2
FROM   tabelle
WHERE  bedingung
ORDER BY spalte ASC;
KlauselBedeutungPflicht?
SELECTWelche Spalten werden zurückgegeben?✅ Ja
FROMAus welcher Tabelle?✅ Ja
WHEREFilterkriterium für Zeilen❌ Nein
ORDER BYSortierung (ASC = aufsteigend, DESC = absteigend)❌ Nein

Mit SELECT * werden alle Spalten zurückgegeben. In der Praxis besser explizit auflisten — das ist lesbarer und performanter.

-- Alle Spalten
SELECT * FROM kunden;

-- Nur bestimmte Spalten
SELECT vorname, nachname, land FROM kunden;

WHERE – Zeilen filtern

Die WHERE-Klausel schränkt ein, welche Zeilen zurückgegeben werden. Sie verwendet Vergleichs- und logische Operatoren.

OperatorBedeutungBeispiel
=GleichWHERE land = 'CH'
<> oder !=UngleichWHERE status <> 'inaktiv'
> <Grösser / KleinerWHERE preis > 100
>= <=Grösser-gleich / Kleiner-gleichWHERE alter >= 18
BETWEENWertebereich (inklusiv)WHERE alter BETWEEN 18 AND 30
INListe von erlaubten WertenWHERE land IN ('CH', 'DE', 'AT')
IS NULLKein Wert vorhandenWHERE email IS NULL

Mehrere Bedingungen mit AND, OR, NOT kombinieren:

-- Kunden aus der Schweiz ab 18 Jahren
SELECT * FROM kunden
WHERE land = 'CH' AND alter >= 18;

-- Kunden ohne E-Mail-Adresse
SELECT vorname, nachname FROM kunden
WHERE email IS NULL;

LIKE – Mustersuche mit Wildcards

LIKE erlaubt die Suche nach Textmustern. Zwei Wildcard-Zeichen stehen zur Verfügung:

WildcardBedeutungBeispielTrifft auf
%Beliebig viele Zeichen (auch 0)LIKE 'M%'Müller, Max, Mo
_Genau ein ZeichenLIKE 'M_ller'Müller, Maller
-- Alle Kunden deren Nachname mit 'M' beginnt
SELECT * FROM kunden WHERE nachname LIKE 'M%';

-- Alle Produkte die 'Pro' irgendwo im Namen haben
SELECT * FROM produkte WHERE bezeichnung LIKE '%Pro%';

-- Namen mit genau 5 Zeichen
SELECT * FROM kunden WHERE nachname LIKE '_____';

Merkhilfe: % = viele Zeichen, _ = ein Zeichen.

Ausführungsreihenfolge & Aliase

SQL verarbeitet Klauseln intern in dieser Reihenfolge — nicht wie sie geschrieben stehen. Das erklärt z.B. warum ein SELECT-Alias in WHERE nicht verfügbar ist:

FROM  →  WHERE  →  GROUP BY  →  HAVING  →  SELECT  →  ORDER BY

Mit AS können Spalten und Tabellen umbenannt werden (Alias). Besonders nützlich bei JOINs:

-- Spalten-Alias
SELECT vorname AS "Vorname", nachname AS "Nachname"
FROM kunden;

-- Tabellen-Alias (Kurzname)
SELECT k.vorname, b.bestelldatum
FROM kunden AS k, bestellungen AS b;