Zurück zur Artikelliste Artikel
7 Leseminuten

Was ist LEFT JOIN in SQL?

Lernen Sie die Details von LEFT JOIN kennen, einem der häufigsten JOIN-Typen in SQL.

Bei SQL geht es hauptsächlich darum, Daten aus Datenbanken abzurufen. Sehr oft müssen Sie Daten aus mehreren Tabellen in Ihrer Datenbank kombinieren. In diesem Fall kommen JOINs ins Spiel.

LEFT JOIN ist einer der JOIN-Typen, die Sie wahrscheinlich sehr oft verwenden werden. In diesem Artikel erkläre ich die Syntax von LEFT JOIN und seine Funktionsweise anhand mehrerer Beispiele und Illustrationen.

JOIN in SQL

In SQL verwenden Sie JOIN , um Daten aus zwei Tabellen auf der Grundlage einer Spalte mit übereinstimmenden Werten zukombinieren. Wenn Sie beispielsweise eine Tabelle mit Kundeninformationen (Kunden-ID, Vorname, Nachname usw.) und eine weitere Tabelle mit den Bestelldaten für einen bestimmten Zeitraum (Bestell-ID, Datum, Kunden-ID, Produkt-ID usw.) haben, können Sie diese beiden Tabellen auf der Grundlage der Spalten, in denen die Kunden-ID-Nummern gespeichert sind, verbinden. So erhalten Sie Bestell- und Kundendaten für jeden Kunden.

Es ist jedoch wichtig zu wissen, dass es in SQL verschiedene Arten von JOINs gibt. Je nach den Zeilen, die Sie in der Ergebnismenge behalten möchten, müssen Sie die richtige auswählen. Wenn Sie sich für Kunden interessieren, die nur während eines bestimmten Zeitraums Bestellungen aufgegeben haben, verwenden Sie einen einfachen JOIN (auch INNER JOIN genannt). Bei dieser Art von SQL JOIN werden nur die Zeilen beibehalten, die in beiden Tabellen vorhanden sind; in unserem Fall sehen Sie eine Zeile in der Ergebnismenge nur, wenn die ID des Kunden sowohl in der customers Tabelle als auch in der orders Tabelle.

Es gibt Fälle, in denen Sie Zeilen aus der ersten Tabelle behalten möchten, für die es keine entsprechenden Datensätze in der zweiten Tabelle gibt. Vielleicht möchten Sie Informationen über alle Kunden in unserer Ergebnismenge sehen, auch wenn sie in einem bestimmten Zeitraum keine Bestellungen hatten. In diesem Fall verwenden Sie eine LEFT JOIN, die Daten aus zwei Tabellen kombiniert, so dass alle Zeilen aus der linken (ersten) Tabelle in das Ergebnis aufgenommen werden.

Dies ist der JOIN-Typ, auf den wir uns in diesem Artikel konzentrieren werden. Wenn Sie nicht sicher sind, welchen JOIN-Typ Sie in einem bestimmten Fall benötigen, sehen Sie sich unser Video-Tutorial über SQL LEFT, RIGHT und FULL JOINs an.

LEFT JOIN Erläutert

LEFT JOIN(auch LEFT OUTER JOIN genannt) gibt alle Datensätze aus der linken (ersten) Tabelle und die übereinstimmenden Datensätze aus der rechten (zweiten) Tabelle zurück. Wenn es keine Übereinstimmung für einen bestimmten Datensatz gibt, erhalten Sie NULLs in den entsprechenden Spalten der rechten Tabelle. Schauen wir uns an, wie das mit dem oben erwähnten Beispiel für Kunden und Bestellungen funktioniert.

Hier sind unsere customers und orders Tabellen.

customers
idfirst_namelast_name
1SteveBrown
2HelenStewart
3JaneSmith
4JackBond

orders
iddatecustomer_idproduct_idamount
12020-12-20323213.99
22020-12-20312412.45
32020-12-2111889.95
42020-12-224854.60

Um diese beiden Tabellen zu verbinden und dabei alle Datensätze der customers Tabelle zu erhalten, können Sie die folgende SQL-Abfrage verwenden:

SELECT *
FROM customers
LEFT JOIN orders
ON customers.id = orders.customer_id
ORDER BY customers.id;

Gehen wir die Syntax von LEFT JOIN durch:

  • SELECT - Beginnen Sie mit der Auflistung der Spalten (aus beiden Tabellen), die Sie in der Ergebnismenge sehen möchten (hier wählen wir alle Spalten mit * aus);
  • FROM - Geben Sie den Namen der linken Tabelle ein, in der alle Datensätze gespeichert werden sollen (z. B. customers);
  • LEFT JOIN - Schreiben Sie den Namen der zweiten (rechten) Tabelle (z. B. orders);
  • ON - Verwenden Sie dieses Schlüsselwort, um die Spalten anzugeben, die für die Verknüpfung der Tabellen verwendet werden sollen, d. h. die Spalten mit den übereinstimmenden Werten. (Hier ist es id aus customers und customer_id aus orders).

In dieser Abfrage verwenden wir auch ORDER BY, um die Ausgabe nach der ID des Kunden zu ordnen, aber das ist optional.

Wenn Sie diese Abfrage ausführen, erhalten Sie die folgende Tabelle.

customersorders
idfirst_namelast_nameiddatecustomer_idproduct_idamount
1SteveBrown12020-12-2111889.95
2HelenStewart[NULL][NULL][NULL][NULL][NULL]
3JaneSmith32020-12-20323213.99
3JaneSmith32020-12-20312412.45
4JackBond42020-12-224854.60

Werfen Sie einen Blick auf die Animation:

Gif zeigt, wie LEFT JOIN funktioniert

Wie funktioniert LEFT JOIN?

Zunächst schaut die Datenbank in jede Zeile der linken Tabelle und sucht anhand der zugehörigen Spalten nach einer Übereinstimmung in der rechten Tabelle. Wenn es eine Übereinstimmung gibt, fügt sie Daten aus der rechten Tabelle in die entsprechende Zeile der linken Tabelle ein. Wenn es mehrere Übereinstimmungen gibt (wie in unserem Fall mit Kunde Nr. 3), wird die Zeile in der linken Tabelle dupliziert, um alle Datensätze aus der rechten Tabelle einzubeziehen. Wenn es keine Übereinstimmung gibt, wird die Zeile aus der linken Tabelle beibehalten und NULL in die entsprechenden Spalten der rechten Tabelle eingefügt (in unserem Beispiel Kunde Nr. 2).

Einfach, nicht wahr? In diesem interaktiven Kurs SQL-JOINs können Sie LEFT JOINs üben. Sehen wir uns nun einige weitere Beispiele für die Arbeit mit LEFT JOINs an.

SQL LEFT JOINs im Einsatz

Beispiel mit Angestellten

Wir haben eine Tabelle mit employees und möchten sie mit der Tabelle abgleichen, die alle im Januar gezahlten Prämien auflistet (jan_bonuses).

employees
idfirst_namelast_name
1JoeBiden
2BernieSanders
3PeterButtigieg
4ElizabethWarren
5MichaelBloomberg

jan_bonuses
idemployee_idamount
10113460.00
10222340.00
10341800.00

Wir möchten diese Tabellen verknüpfen, um zu sehen, wer im Januar Prämien erhalten hat. Unser Ergebnis soll alle Mitarbeiter enthalten, unabhängig davon, ob sie einen Bonus erhalten haben oder nicht. Daher verwenden wir eine LEFT JOIN:

SELECT *
FROM employees
LEFT JOIN jan_bonuses
ON employees.id = jan_bonuses.employee_id;
employeesjan_bonuses
idfirst_namelast_nameidemployee_idamount
1JoeBiden10113460.00
2BernieSanders10222340.00
3PeterButtigieg[NULL][NULL][NULL]
4ElizabethWarren10341800.00
5MichaelBloomberg[NULL][NULL][NULL]

Wie erwartet, enthält das Ergebnis alle Mitarbeiter. Wenn ein Mitarbeiter in der Tabelle mit den Bonusinformationen nicht gefunden wird, werden die entsprechenden Spalten aus der zweiten Tabelle mit den Werten von NULL gefüllt.

Möchten Sie wissen, wie andere OUTER JOINs funktionieren? Lesen Sie diese illustrierte Anleitung zum SQL OUTER JOIN, um zu erfahren, wie sich RIGHT OUTER JOIN und FULL OUTER JOIN von LEFT OUTER JOIN unterscheiden.

Beispiel mit Ländern

In unserem letzten Beispiel werden wir zwei Tabellen mit LEFT JOIN verbinden, aber nur ausgewählte Spalten in das Endergebnis aufnehmen.

Wir haben eine Liste von Ländern mit einigen grundlegenden Informationen und möchten sie mit den BIP-Daten für 2019 ergänzen, sofern diese verfügbar sind.

countries
idnamepopulationcurrencyarea
201United States330,770,244USD9,525,067
202China1,405,631,120CNY9,596,961
203Japan125,770,000JPY377,975
204Germany83,122,889EUR357,114
205India1,370,521,240INR3,287,263

gdp_2019
rankcountry_idgdp_nominal_MUSD
120121,427,700
220214,342,903
32035,081,770

In unserer Ausgabe benötigen wir nicht alle Informationen zu jedem Land, sondern nur die ID, den Namen, die Bevölkerung und das nominale BIP für 2019. Hier ist die Abfrage, die wir verwenden werden:

SELECT id, name, population, gdp_nominal_MUSD
FROM countries
LEFT JOIN gdp_2019
ON countries.id = gdp_2019.country_id;
countriesgdp_2019
idnamepopulationgdp_nominal_MUSD
201United States330,770,24421,427,700
202China1,405,631,12014,342,903
203Japan125,770,0005,081,770
204Germany83,122,889[NULL]
205India1,370,521,240[NULL]

Die Tabelle enthält drei Spalten aus der Tabelle countries Tabelle und eine Spalte aus der gdp_2019 Tabelle. Wie erwartet behält LEFT JOIN alle Datensätze aus der ersten Tabelle und gibt NULL Werte für die nicht übereinstimmenden Datensätze ein.

Beachten Sie, dass wir in dieser SELECT Anweisung einfach die Namen der Spalten aufgeführt haben, die wir im Ergebnis sehen wollen. Dies funktioniert nur, wenn wir nicht in beiden Tabellen Spalten mit demselben Namen haben. Der sicherere Ansatz besteht darin, die Tabelle für jede angeforderte Spalte anzugeben, d. h. countries.id, countries.name, countries.population, gdp_2019.gdp_nominal_MUSD.

Wenn Sie mehr als zwei Tabellen mit LEFT JOIN verknüpfen müssen, lesen Sie meinen Leitfaden zur Verknüpfung mehrerer Tabellen in SQL.

Zeit zum Üben von LEFT JOIN!

Sie haben die Syntax von LEFT JOIN gelernt und wissen, wann und wie Sie diesen SQL-JOIN-Typ verwenden können. Sie sind bereit für den nächsten Schritt - das Schreiben Ihrer eigenen SQL-Abfragen mit LEFT JOINs.

Ich empfehle den Einstieg in unseren SQL-JOINs Kurs zu beginnen, der 93 interaktive Übungen zu INNER JOIN, OUTER JOINs, nicht-äquivalenten JOINs und mehr enthält. Nach Abschluss dieses Kurses wissen Sie, wie man den richtigen JOIN-Typ auswählt, wie man mehrere Tabellen verknüpft, wie man eine Tabelle mit sich selbst verknüpft und wie man Tabellen mit anderen bedingten Operatoren als Gleichheit verknüpft.

Fühlen Sie sich unsicher beim Üben von SQL-JOINs online? Lesen Sie diesen Artikel, in dem die besten Methoden zum Üben der verschiedenen Arten von SQL-JOINs vorgestellt werden.

Vielen Dank fürs Lesen und viel Spaß beim Lernen!