Abfragen: Verbünde („Joins“)

Ein Join1 zweier Tabellen, z.B. der Tabellen fahrschueler und fahrlehrer, besteht aus...

  1. dem kartesischen Produkt dieser Tabellen:
    FROM fahrlehrer, fahrschueler
    
  2. ...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.

  1. deutsch: Verbund