5.1 JOINs und Unterabfragen
JOINs verbinden Zeilen verschiedener Tabellen anhand einer fachlich passenden Bedingung. Ohne Bedingung entsteht ein kartesisches Produkt; dessen Zeilenzahl ist das Produkt der beteiligten Mengen und meist nicht das gewünschte Ergebnis.
INNER JOIN und Aliase
INNER JOIN liefert nur Kombinationen, für die die ON-Bedingung erfüllt ist. Tabellenaliase verkürzen Namen und machen gleichnamige Spalten eindeutig. Ein Equi-Join verwendet Gleichheit, aber JOIN-Bedingungen können auch andere Vergleiche enthalten.
Passende Zeilen verbinden
SELECT k.name, b.bestell_id, b.summe
FROM kunde AS k
INNER JOIN bestellung AS b
ON b.kunden_id = k.kunden_id
WHERE b.status = 'offen';LEFT und RIGHT OUTER JOIN
LEFT JOIN behält jede Zeile der linken Tabelle. Fehlt rechts ein Treffer, sind deren Ausgabespalten NULL. Damit lassen sich beispielsweise Kunden ohne Bestellung finden. RIGHT JOIN arbeitet spiegelbildlich und lässt sich meist als LEFT JOIN mit vertauschter Tabellenreihenfolge lesbarer formulieren.
Nicht zugeordnete Datensätze
SELECT k.kunden_id, k.name
FROM kunde AS k
LEFT JOIN bestellung AS b ON b.kunden_id = k.kunden_id
WHERE b.bestell_id IS NULL;Unterabfragen und EXISTS
Unterabfragen können Einzelwerte, Mengen oder Existenzprüfungen liefern. Ob JOIN oder Unterabfrage besser ist, hängt von Aussage, Lesbarkeit und Ausführungsplan ab; pauschale Performance-Regeln sind unzuverlässig.
Korrelierte Unterabfrage
SELECT k.kunden_id, k.name
FROM kunde AS k
WHERE EXISTS (
SELECT 1 FROM bestellung AS b
WHERE b.kunden_id = k.kunden_id AND b.status = 'offen'
);Quellen zur fachlichen Prüfung
PDF-Download nach Anmeldung
Zum Schutz der Unterrichtsunterlagen steht der PDF-Download ausschließlich angemeldeten Nutzern zur Verfügung.
