Abfragen: Verbünde („Joins“)
Ein Join1 zweier Tabellen, z.B. der Tabellen fahrschueler und fahrlehrer, besteht aus...
-
dem kartesischen Produkt dieser Tabellen:
FROM fahrlehrer, fahrschueler -
...versehen mit einer Join-Bedingung, welche typischerweise den Fremdschlüssel der einen Tabelle mit dem Primärschlüssel der anderen Tabelle abgleicht:
WHERE fahrlehrer.kuerzel = fahrschueler.fahrlehrer_id
Für die vollständige Abfrage gibt es nun zwei verschiedene Schreibweisen:
Die erste Schreibweise kombiniert zwei dir bereits bekannte Konzepte. Das kartesische Produkt wird in der FROM-Klausel notiert und die Join-Bedingung in der WHERE-Klausel.
SELECT *
FROM fahrschueler, fahrlehrer -- Kartesisches Produkt
WHERE fahrlehrer.kuerzel = fahrschueler.fl_kuerzel -- Join-Bedingung
In diesem Fall kann man sogar die Spaltennamen ohne Tabellennamen schreiben, da sie eindeutig sind.
SELECT *
FROM fahrschueler, fahrlehrer -- Kartesisches Produkt
WHERE kuerzel = fl_kuerzel -- Join-Bedingung
Die zweite Schreibweise fasst die Join-Bedingung mit den Tabellen innerhalb der FROM-Klausel mit einem ... JOIN ... ON ... zusammen.
SELECT *
FROM fahrschueler JOIN fahrlehrer ON fahrlehrer.kuerzel = fahrschueler.fl_kuerzel
Das zugehörige Ergebnis enthält nun alle kombinierten Fahrschüler- und Fahrlehrerzeilen, bei denen die kuerzel-Spalte des Fahrlehrers mit der fl_kuerzel-Spalte des Fahrschülers übereinstimmt.
- ↑ deutsch: Verbund