Der SQL LEFT JOIN verbindet zwei Tabellen miteinander. Alle Zeilen aus der linken Tabelle (TabelleA) werden ausgegeben und dazu übereinstimmende Werte aus der rechten Tabelle (TabelleB) werden angefügt.
SELECT Spalte
FROM TabelleA
LEFT JOIN TabelleB
ON TabelleA.Spalte = TabelleB.Spalte;
Die Zeilen aus der linken Tabelle müssen also nicht zwangsweise mit der rechten Tabelle übereinstimmen. Es wird die linke Tabelle plus ein INNER JOIN aus beiden Tabellen wiedergegeben. Da in der linken Tabelle Zeilen enthalten sind, die nicht mit der rechten Tabelle übereinstimmen, kommt es in den gejointen Spalten der rechten Tabelle zu NULL Werten. In einigen Datenbanken wird der LEFT JOIN als LEFT OUTER JOIN bezeichnet.
SQL LEFT JOIN - Beispiel
Ein Online-Händler möchte einen Überblick über die Produktrezensionen seiner Kunden bekommen. Dafür möchte er seine Kunden-Tabelle mit der Bestellungen_April-Tabelle verknüpfen, um einen direkten Vergleich zu haben. In beiden Tabellen überschneidet sich die Kunden_ID.
Kunden | |||
Kunden_ID | Name | Geburtsdatum | Geschlecht |
1 | Max Mustermann | 01.01.1990 | M |
2 | Erika Musterfrau | 31.12.1989 | W |
3 | Frauke Herrmann | 31.06.2000 | D |
Bestellungen_April | |||
Bestell_ID | Bestelldatum | Rezensionstext | Kunden_ID |
1 | 20.04.2020 | Ein wunderbares … | 1 |
2 | 22.04.2020 | (null) | 1 |
3 | 25.04.2020 | Ich bin unzufrieden … | 3 |
SELECT Kunden.Name, Kunden.Geschlecht,
Bestellungen_April.Bestelldatum, Bestellungen_April.Rezensionstext
FROM Kunden
LEFT JOIN Bestellungen_April
ON Kunden.Kunden_ID = Bestellungen_April.Kunden_ID;
Die Tabellennamen werden vor die Spalten geschrieben, damit eine konkrete Zuordnung stattfinden kann, falls Spalten aus verschiedenen Tabellen denselben Namen haben.
Name | Geschlecht | Bestelldatum | Rezensionstext |
Max Mustermann | M | 20.04.2020 | Ein wunderbares … |
Max Mustermann | M | 22.04.2020 | (null) |
Erika Musterfrau | W | (null) | (null) |
Frauke Herrmann | D | 25.04.2020 | Ich bin unzufrieden … |
Die Spalten Bestelldatum und Rezensionstext wurden über den LEFT JOIN Befehl angefügt. Auffällig ist, dass es zwei Zeilen mit Max Mustermann gibt. Das liegt daran, dass die Spalte Kunden_ID, über die der LEFT JOIN durchgeführt wurde, in der Bestellungen-Tabelle zwei Mal existiert. Daher gibt es zwei Verweise aus den Bestellungen auf den Kunden Max Mustermann. Da nicht zwei Werte in ein Feld eingefügt werden können, wird seine Zeile dupliziert und mit den zweiten Werten aus der Bestellungen-Tabelle bereichert.
Zu Erika Musterfrau gibt es keine Informationen in der Bestellungen-Tabelle, da ihre Kunden_ID „2“ nicht vorhanden ist. Damit kann keine Zeile zu Erika Musterfrau zugeordnet werden, weshalb bei ihr in den neuen Spalten NULL Werte enthalten sind. Die Kundin hat also keine Bestellung im April getätigt.