Sehr hoch
JOINs & Unterabfragen
Mehrere Tabellen verknüpfen – Stolperstein in fast jeder SELECT-Aufgabe.
Warum Priorität „Sehr hoch"? Fast immer in der Prüfung (80–99%). Intensiv üben.
Lernziele
- INNER, LEFT, RIGHT und FULL OUTER JOIN sicher unterscheiden
- Beim JOIN die passenden ON-Bedingungen formulieren
- Selbst-Joins und kartesische Produkte erkennen
1. JOIN-Typen – die Mengenlogik
| JOIN | Ergebnis |
|---|---|
INNER JOIN | Schnittmenge: nur Zeilen, die auf BEIDEN Seiten einen Treffer haben |
LEFT JOIN | Alle Zeilen der linken Tabelle + passende rechts; fehlende rechts als NULL |
RIGHT JOIN | Spiegelbildlich |
FULL OUTER JOIN | Alle Zeilen beider Tabellen, unpassend ⇒ NULL |
CROSS JOIN | Kartesisches Produkt – alle möglichen Kombinationen |
2. Syntax-Vergleich
sql
-- Alte Komma-Syntax (funktioniert, aber unübersichtlich)
SELECT k.name, b.datum
FROM kunde k, bestellung b
WHERE k.id = b.kunde_id;
-- Modern mit JOIN … ON
SELECT k.name, b.datum
FROM kunde k
INNER JOIN bestellung b ON b.kunde_id = k.id;3. LEFT JOIN – der häufige Punktbringer
Frage: »Zeige alle Kunden und die Anzahl ihrer Bestellungen, auch die ohne Bestellung.«
sql
SELECT k.name, COUNT(b.id) AS anzahl
FROM kunde k
LEFT JOIN bestellung b ON b.kunde_id = k.id
GROUP BY k.name;4. Self-Join
Dieselbe Tabelle zweimal referenzieren – Aliasse sind Pflicht.
sql
-- Mitarbeiter + ihre Vorgesetzten
SELECT m.name AS mitarbeiter, v.name AS vorgesetzter
FROM mitarbeiter m
LEFT JOIN mitarbeiter v ON v.id = m.vorgesetzter_id;Übungen
SQL-ÜbungLiefere zu jeder Bestellung (ID, Datum) den Kundennamen. Bestellungen ohne Kundeneintrag sollen trotzdem angezeigt werden.
Eine AntwortWelcher JOIN entspricht der Schnittmenge (nur Zeilen, die auf beiden Seiten passen)?