SQL Schnellstart – Left Join

In der letzten Lektion hast du den INNER JOIN kennengelernt, welcher die Schnittmenge zweier Tabellen bildet. Nun wirst du einen weiteren JOIN kennenlernen - den sogenannten "LEFT JOIN".

SQL LEFT JOIN: Definition

Der LEFT JOIN verknüpft Datensätze aus zwei Tabellen, welche ein bestimmtes Kriterium erfüllen. Im Unterschied zum INNER JOIN werden beim LEFT JOIN aber auch die Datensätze der linken Tabelle (die Tabelle, welche bei FROM steht) miteinbezogen. Wie beim INNER JOIN musst du ein bestimmtes Kriterium angeben, wie die Daten miteinander verknüpft werden sollen. Du hast nun also die gesamte Tabelle A (die linke Tabelle) und die Schnittmenge von A und B:

(Quelle: https://upload.wikimedia.org/wikipedia/commons/f/f6/SQL_Join_-_01_A_Left_Join_B.svg, 17.06.2020, Urheber: "GermanX")

SQL LEFT JOIN: Syntax

Die Syntax ist nahezu identisch zum INNER JOIN. Der einzige Unterschied ist, dass du statt "INNER JOIN" das Schlüsselwort "LEFT JOIN" schreibst.

SELECT tabelle1.spalte1, tabelle1.spalte2, ..., tabelle1.spalteN, 
tabelle2.spalte1, tabelle1.spalte2, ..., tabelle2.spalteN 
FROM tabelle1 
LEFT JOIN tabelle2 ON tabelle1.spalteX = tabelle2.spalteX;

Nach dem "ON" kannst du eine Bedingung angeben. Meistens soll hier der Primärschlüssel der einen Tabelle mit dem Fremdschlüssel der anderen Tabelle übereinstimmen.

SQL LEFT JOIN: Beispiel

Du bist Personalverantwortlicher eines 5-Sterne-Hotels. Das Hotel hat mehrere Butler zur Verfügung, welche keinem, einem oder mehreren Kunden behilflich sein können. Die Gäste können einen Butler dazubuchen, müssen dies aber nicht. Schau dir die folgenden Tabellen an:

Tabelle "Butler":

Tabelle "Gaeste":

Nun möchtest du alle Gäste anzeigen und wenn dazugebucht, die Namen der zuständigen Butler. Mit einem LEFT JOIN lässt sich dieses Problem folgendermaßen lösen:

SELECT Gaeste.Vorname AS Gastvorname, Gaeste.Nachname AS Gastnachname,
Butler.Vorname AS Butlervorname, Butler.Nachname AS Butlernachname
FROM Gaeste
LEFT JOIN Butler ON Gaeste.ButlerID = Butler.ButlerID;

Wie du siehst, habe ich bei der Selektierung der Spalten wieder das Schlüsselwort AS (Alias) verwendet, um die Spaltenbezeichnung der Ausgabe umzubenennen, damit ich weiß, ob es sich um den Vornamen des Butlers oder des Gastes handelt. Wir erhalten folgendes Ergebnis:

Hinweis: Würden wir dieselbe Abfrage nur mit einem INNER JOIN ausführen, so würden die Gäste "Martin Müller" und "Lea Kunze" nicht in unserer Abfrage-Tabelle stehen, weil diese kein Butler haben.

Code-Aufgabe: Alle Butler und ihre Gäste

Im oberen Beispiel waren die Gäste unsere "linke Tabelle". Nun soll die Tabelle der Gäste ("Gaeste") mit einem LEFT JOIN der Tabelle "Butler" (linke Tabelle) beitreten. Findest du nun einen Butler, dem derzeit kein Gast zugewiesen ist? Die Lösung findest du unten.

[lp_spoiler title="Lösung anzeigen"]

Lösung:

SELECT Butler.Vorname AS Butlervorname, Butler.Nachname AS Butlernachname, 
Gaeste.Vorname AS Gastvorname, Gaeste.Nachname AS Gastnachname
FROM Butler
LEFT JOIN Gaeste ON Gaeste.ButlerID = Butler.ButlerID;

Du musst  "Gaeste" beim FROM zu "Butler" umändern. Zusätzlich musst du "Butler" bei LEFT JOIN in "Gaeste" ändern. Damit ist nun "Butler" die linke Tabelle und "Gaeste" tritt dieser (linken) Tabelle beim Erfüllen des Kriteriums bei.

Wie du siehst, kommt jetzt auch "Sophia Luft" vor, obwohl diese keinem Gast zugewiesen ist.

[/lp_spoiler]

Fazit

Mit dem LEFT JOIN kennst du nun eine weitere JOIN-Möglichkeit, welche dir immer wieder nützlich sein wird. Denke daran, dass die Tabelle, welche beim FROM steht, immer die "linke" Tabelle ist. Die Tabelle beim JOIN ist die rechte Tabelle.