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;
| Klausel | Bedeutung | Pflicht? |
|---|---|---|
SELECT | Welche Spalten werden zurückgegeben? | ✅ Ja |
FROM | Aus welcher Tabelle? | ✅ Ja |
WHERE | Filterkriterium für Zeilen | ❌ Nein |
ORDER BY | Sortierung (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.
| Operator | Bedeutung | Beispiel |
|---|---|---|
= | Gleich | WHERE land = 'CH' |
<> oder != | Ungleich | WHERE status <> 'inaktiv' |
> < | Grösser / Kleiner | WHERE preis > 100 |
>= <= | Grösser-gleich / Kleiner-gleich | WHERE alter >= 18 |
BETWEEN | Wertebereich (inklusiv) | WHERE alter BETWEEN 18 AND 30 |
IN | Liste von erlaubten Werten | WHERE land IN ('CH', 'DE', 'AT') |
IS NULL | Kein Wert vorhanden | WHERE 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:
| Wildcard | Bedeutung | Beispiel | Trifft auf |
|---|---|---|---|
% | Beliebig viele Zeichen (auch 0) | LIKE 'M%' | Müller, Max, Mo |
_ | Genau ein Zeichen | LIKE '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;