Zurück zur Artikelliste Artikel
16 Leseminuten

Was ist ein LEFT OUTER JOIN in SQL? Eine Erläuterung mit 4 Beispielen

Im heutigen Artikel wird der LEFT OUTER JOIN in SQL besprochen. Wir werden mehrere Beispiele für die Verwendung von LEFT OUTER JOIN durchgehen und ihn mit INNER JOIN vergleichen.

JOIN ist eine SQL-Funktion, mit der Sie Daten aus zwei oder mehr Tabellen kombinieren können. Die Natur relationaler Datenbanken macht JOIN zu einer der am häufigsten verwendeten Funktionen in SQL. Und warum? In der Praxis werden Sie nur sehr selten alle benötigten Daten in einer Tabelle haben. Selbst die primitivsten Datenbanken bestehen aus mindestens zwei Tabellen.

Es gibt viele verschiedene Arten von JOINs. Wir werden uns hier auf LEFT OUTER JOIN konzentrieren. Um eine umfassende Übersicht über die verschiedenen Arten von JOINs zu erhalten, besuchen Sie unseren interaktiven SQL-JOINs Kurs. Neben den Grundlagen werden auch das Verbinden mehrerer Tabellen und die Verwendung von Self- und Non-Equi-Joins erklärt. Sie werden über 90 praktische Übungen absolvieren - alle anhand von Beispielen aus der Praxis!

Wir führen Sie in LEFT OUTER JOIN ein und machen es dann mit praktischen Beispielen noch interessanter. Wenn Sie während der Übungen eine Auffrischung einiger Konzepte benötigen, denken Sie an unser SQL JOIN Cheat Sheet.

Was ist ein LEFT OUTER JOIN?

Der gebräuchlichste JOIN ist INNER JOIN. Es handelt sich um einen Join-Typ, der nur die übereinstimmenden Zeilen aus den beiden verbundenen Tabellen zurückgibt. Es gibt andere JOIN Typen, die Zeilen aus einer verbundenen Tabelle zurückgeben können, auch wenn die Zeile keine passende Zeile in der anderen Tabelle hat. Diese Arten von JOINs werden als Outer-Joins bezeichnet.

Ein LEFT JOIN ist ein Typ von Outer-Join, der alle Zeilen aus der linken Tabelle und die passenden Zeilen aus der rechten Tabelle ausgibt.

Was ist der Unterschied zwischen LEFT OUTER JOIN und LEFT JOIN?

Kurze Antwort: Es gibt keinen Unterschied!

Lange Antwort: Der vollständige Name dieser Art von Verknüpfung lautet LEFT OUTER JOIN. Sie haben wahrscheinlich schon SQL-Code-Beispiele gesehen, in denen die Tabellen nur mit LEFT JOIN verbunden werden. Das liegt daran, dass SQL sowohl LEFT OUTER JOIN als auch LEFT JOIN akzeptiert.

Da LEFT JOIN kürzer ist, wird es häufiger verwendet. Wenn Sie es sehen, bedeutet es einfach LEFT OUTER JOIN. Das "Outer" ist implizit, da es keinen anderen Left Join als einen Left Outer Join gibt.

LEFT [OUTER] JOIN Syntax

Die Syntax von LEFT JOIN folgt der Standardsyntax von JOIN:

  1. Verweisen Sie auf die erste Tabelle in FROM.
  2. Verwenden Sie das Schlüsselwort LEFT JOIN, um auf die zweite Tabelle zu verweisen.
  3. Verwenden Sie das Schlüsselwort ON, um die Verknüpfungsbedingung anzugeben.

Mit anderen Worten, die Syntax lautet:

SELECT …
FROM table_1
LEFT JOIN table_2
ON table_1.column = table_2.column;

Wie funktioniert also LEFT OUTER JOIN? In dem obigen allgemeinen Beispiel verweist die Abfrage auf table_1 und verknüpft sie links mit table_2. Sie gibt zunächst alle Zeilen von table_1 zurück, unabhängig von der Verknüpfungsbedingung. Warum? Weil dies die Natur von LEFT JOIN ist - sie gibt alle Zeilen aus der linken (d.h. ersten) Tabelle zurück.

Dann prüft die Abfrage die Verknüpfungsbedingung - in diesem Fall, wenn ein Wert in der Spalte von table_2 mit einem Wert aus der Spalte aus table_1. LEFT JOIN gibt nur Werte aus der rechten (d. h. zweiten oder Tabelle_2) Tabelle zurück, auf die die Verknüpfungsbedingung zutrifft. Wenn keine solchen Werte in der rechten Tabelle vorhanden sind, lauten die zurückgegebenen Werte NULL. Ein anschauliches Beispiel hierfür finden Sie in unserem Artikel über die Funktionsweise des LEFT JOIN.

Wenn die Tabellen verbunden sind, können Sie selbstverständlich jede Spalte aus beiden Tabellen in SELECT auswählen.

Nun, da Sie die Syntax kennen, müssen Sie sie nur noch in die Praxis umsetzen.

4 Beispiele für LEFT OUTER JOIN

Der Datensatz für die Beispiele 1-3

Stellen wir zunächst den Datensatz vor.

Die erste Tabelle, departmentsenthält die folgenden Daten:

iddepartment_name
1Accounting
2Sales
5Compliance

Die Abfrage zur Erstellung der Tabelle finden Sie hier.

Die zweite Tabelle ist employeesund Sie können sie mit dieser Abfrage erstellen. Die Tabelle enthält die folgenden Daten:

idfirst_namelast_nameemaildepartment_id
1DellaHinchshawdhinchshaw@company.com1
2RoanaAndraudrandraud@company.com2
3NettleDrewellndrewell@company.com3
4CoralieLandreclandre@company.com3
5FredericaKetchasidefketchaside@company.com1
6FeneliaGuisotfguisot@company.com1
7MarysaPortchmportch@company.comNULL
8HarlenDrakardhdrakard@company.com2
9TiffieHauchthauch@company.comNULL
10LuraGravellslgravells@company.com1
11FaeLagdenflagden@company.com4
12ChuchoBearcbear@company.com4
13TracieBellisontbellison@company.com2
14CharitaMissencmissen@company.com1
15BearShoulderbshoulder@company.com1

Zwei Angestellte haben einen NULL Wert in der Spalte department_id. Dies sind neue Mitarbeiterdatensätze, die noch nicht mit der Abteilung aktualisiert wurden.

Beispiel 1: Alle Mitarbeiter und ihre Abteilungen finden

Verwenden wir die obigen Tabellen, um alle Mitarbeiter und ihre Abteilungen aufzulisten.

Da es in diesem Artikel um LEFT OUTER JOIN geht, ist es keine Überraschung, dass wir genau diese Verknüpfung verwenden, um dieses Problem zu lösen. Hier ist die Abfrage:

SELECT e.id,
	 e.first_name,
	 e.last_name,
	 d.department_name
FROM employees e 
LEFT JOIN departments d
ON e.department_id = d.id
ORDER BY e.id;

Die Ergebnisdaten, die wir benötigen, sind die ID-Nummern, Namen und Abteilungen der Mitarbeiter. Deshalb befinden sich diese Spalten in SELECT.

Um alle diese Spalten zu erhalten, müssen wir auf Daten aus beiden Tabellen zugreifen. Schauen wir uns an, wie das geht.

Zunächst wird die Tabelle employees in FROM referenziert. Warum diese Tabelle und nicht die andere? Zur Erinnerung: Es ist wichtig, auf welche Tabelle in LEFT JOIN zuerst verwiesen wird. Und warum? Weil diese Tabelle die linke Tabelle ist und LEFT JOIN alle Zeilen aus dieser Tabelle zurückgibt, egal was passiert.

Wir verweisen auf die Tabelle employees zuerst, weil wir alle Angestellten aus dieser Tabelle auflisten müssen. Dann verweisen wir auf die Tabelle departments. Wir verbinden beide Tabellen unter der Bedingung, dass die Spalte department_id aus der Tabelle employees identisch ist mit der Spalte id aus der Tabelle departments. Diese beiden Spalten sind gemeinsame Dimensionen (Primärschlüssel und Fremdschlüssel) der beiden Tabellen und eignen sich daher ideal für die Verwendung in der Verknüpfungsbedingung.

Um eine besser lesbare Ausgabe zu erhalten, ordnen wir die Ergebnisse nach der Mitarbeiter-ID:

idfirst_namelast_namedepartment_name
1DellaHinchshawAccounting
2RoanaAndraudSales
3NettleDrewellNULL
4CoralieLandreNULL
5FredericaKetchasideAccounting
6FeneliaGuisotAccounting
7MarysaPortchNULL
8HarlenDrakardSales
9TiffieHauchNULL
10LuraGravellsAccounting
11FaeLagdenNULL
12ChuchoBearNULL
13TracieBellisonSales
14CharitaMissenAccounting
15BearShoulderAccounting

Die Ausgabe listet alle Mitarbeiter auf - alle 15. Sie zeigt auch ihre Abteilungen, nämlich "Buchhaltung" und "Vertrieb". Sie werden feststellen, dass einige Mitarbeiter NULL Werte in der Spalte department_name haben. Zwei von ihnen haben wir bereits erwähnt: neue Mitarbeiter ohne aktualisierte Abteilungs-ID in der Tabelle. Diese hatten NULL Werte in der ursprünglichen employees Tabelle und sind blau markiert.

Es gibt jedoch auch andere Mitarbeiter - grün markiert - mit NULL Werten. Dies ist das Ergebnis von LEFT JOIN. Alle diese Mitarbeiter haben eine Abteilungs-ID von 4, aber die Tabelle departments enthält diesen Wert nicht. Es scheint, dass die Tabelle departments auch nach einer Aktualisierung verlangen könnte. Eine wirklich schäbige Datenbank für ein so respektables fiktives Unternehmen!

Zur Erinnerung: Die Werte aus der linken Tabelle, die in der rechten Tabelle nicht gefunden werden, werden als NULL angezeigt.

Was wäre, wenn wir einen INNER JOIN verwenden würden?

Schreiben wir die obige Abfrage noch einmal, diesmal mit einem INNER JOIN (gewöhnlich abgekürzt mit JOIN) anstelle eines LEFT JOIN:

SELECT e.id,
	 e.first_name,
	 e.last_name,
	 d.department_name
FROM departments d
JOIN employees e
ON e.department_id = d.id
ORDER BY e.id;

Die Syntax ist genau dieselbe, wir haben nur einen anderen Verknüpfungstyp verwendet. Lassen Sie uns sehen, was das Ergebnis sein wird:

idfirst_namelast_namedepartment_name
1DellaHinchshawAccounting
2RoanaAndraudSales
5FredericaKetchasideAccounting
6FeneliaGuisotAccounting
8HarlenDrakardSales
10LuraGravellsAccounting
13TracieBellisonSales
14CharitaMissenAccounting
15BearShoulderAccounting

Einige Angestellte fehlen; hier sind es nur neun. Eine genauere Betrachtung zeigt, dass die Mitarbeiter mit den IDs 3, 4, 7, 9, 11 und 12 nicht im Ergebnis enthalten sind. Und warum? Wenn Sie zurückgehen, sehen Sie, dass es sich bei den fehlenden Mitarbeitern um diejenigen mit NULLs in department_name in der Ausgabe LEFT OUTER JOIN handelt.

Denken Sie daran, dass INNER JOIN nur übereinstimmende Zeilen aus beiden Tabellen zurückgibt - mit anderen Worten, nur die Mitarbeiter, die eine Abteilungs-ID haben, die in beiden Tabellen gefunden wurde.

In dieser Situation, in der wir alle Mitarbeiter und ihre Abteilungen haben wollten, ist LEFT JOIN also die richtige Wahl. Jetzt sehen wir auch die Mitarbeiter ohne Abteilung, und wir können feststellen, dass unsere Datenbank aktualisiert werden muss.

Beispiel 2: Alle Abteilungen und ihre Mitarbeiter auflisten

Um das gewünschte Ergebnis zu erhalten, müssen wir die Reihenfolge der Tabellen in LEFT JOIN ändern.

Hier ist die Abfrage:

SELECT d.id,
	 d.department_name,
	 e.first_name,
	 e.last_name
FROM  departments d
LEFT JOIN employees e
ON d.id = e.department_id
ORDER BY d.id;

Wir ändern die Reihenfolge der Spalten in SELECT, um die Ausgabe besser darzustellen. Die meisten Spalten sind dieselben wie zuvor. Dieses Mal wählen wir die Abteilungs-ID aus der Tabelle departmentsund nicht die Mitarbeiter-ID.

Jetzt ist die Tabelle departments ist unsere linke Tabelle. Das liegt daran, dass wir alle Abteilungen aus dieser Tabelle anzeigen wollen, unabhängig davon, ob sie auch in der Tabelle employees - unserer rechten Tabelle.

Die ON-Bedingung bleibt dieselbe, wir haben nur die Reihenfolge der Spalten umgedreht. Das ist eigentlich egal; die Reihenfolge hätte auch gleich bleiben können. Dies geschieht nur aus ästhetischen Gründen, da es einfacher ist, die Bedingung zu lesen, wenn sie der Reihenfolge der Tabellen in LEFT JOIN folgt.

Außerdem sortieren wir die Ausgabe nach der Abteilungs-ID.

Hier ist das Ergebnis:

iddepartment_namefirst_namelast_name
1AccountingDellaHinchshaw
1AccountingFredericaKetchaside
1AccountingFeneliaGuisot
1AccountingLuraGravells
1AccountingCharitaMissen
1AccountingBearShoulder
2SalesHarlenDrakard
2SalesTracieBellison
2SalesRoanaAndraud
5ComplianceNULLNULL

Diese Ausgabe zeigt nur neun Mitarbeiter an, im Vergleich zu 15 im vorherigen Beispiel. Alle Mitarbeiter mit den Werten NULL in der Ausgabe des letzten Beispiels erscheinen nicht in dieser Ausgabe.

Der Grund dafür ist wiederum LEFT JOIN. Als wir die departments unsere linke Tabelle erstellt haben, wurden alle Abteilungen und ihre Mitarbeiter aufgelistet. Alle anderen Mitarbeiter sind hier nicht zu finden. Und warum? Entweder haben sie die Abteilungsnummer 4, die in der Tabelle nicht auftaucht departmentsoder sie sind neue Mitarbeiter (erinnern Sie sich an sie?) mit NULL als Abteilungs-ID.

Die einzige NULLs in dieser Ausgabe erscheint in der letzten Zeile. Es gibt die Abteilung "Compliance", der keine Mitarbeiter zugeordnet sind. Mit anderen Worten, es gibt keine Mitarbeiter mit dem Wert 5 in der Spalte department_id der employees Tabelle.

Zur Erinnerung: Die Reihenfolge der Tabellen in LEFT JOIN ist wichtig!

Was wäre, wenn wir einen INNER JOIN verwenden würden?

Ändern wir die Abfrage und verwenden wir einen INNER JOIN:

SELECT d.id,
	 d.department_name,
	 e.first_name,
	 e.last_name
FROM  departments d
INNER JOIN employees e
ON d.id = e.department_id
ORDER BY d.id;

Die Ausgabe ist im Grunde dieselbe wie beim Inner-Join von Beispiel 1. Der einzige Unterschied ist, dass es eine Abteilungs-ID anstelle einer Mitarbeiter-ID gibt. Ansonsten ist es das Gleiche, so dass wir keine Zeit auf die Analyse verwenden werden.

iddepartment_namefirst_namelast_name
1AccountingDellaHinchshaw
1AccountingFredericaKetchaside
1AccountingFeneliaGuisot
1AccountingLuraGravells
1AccountingCharitaMissen
1AccountingBearShoulder
2SalesHarlenDrakard
2SalesTracieBellison
2SalesRoanaAndraud

Beispiel 3: Auflisten aller Abteilungen und der Anzahl der Mitarbeiter in jeder Abteilung

LEFT JOINDer Join wird wie alle anderen Joins häufig mit den Aggregatfunktionen von SQL verwendet. Dies wird hier nützlich sein.

Werfen Sie einen Blick auf diese Abfrage:

SELECT d.department_name, 
 COUNT(e.id) AS number_of_employees
FROM departments d
LEFT JOIN employees e
ON d.id = e.department_id
GROUP BY d.department_name;

Beginnen wir die Erklärung mit der FROM Klausel. Da wir alle vorhandenen Abteilungen auflisten wollen, beziehen wir uns zunächst auf die Tabelle departments in FROM. Warum? Weil es einige Mitarbeiter ohne Abteilung gibt, die wir nicht in unserem Ergebnis haben wollen. Wie wir gesehen haben, gibt es auch eine Abteilung ohne Mitarbeiter; wir wollen diese Abteilung trotzdem in der Ausgabe haben.

Dann folgt die Tabelle employees nach LEFT JOIN. Die Tabellen werden unter der gleichen Bedingung wie im vorherigen Beispiel verknüpft.

Um die richtige Ausgabe zu erhalten, müssen wir den Abteilungsnamen in SELECT auflisten. Außerdem müssen wir die Aggregatfunktion COUNT(e.id) verwenden, um die Anzahl der Mitarbeiter-IDs zu zählen.

Warum können wir nicht COUNT(*) verwenden? Weil sie alle Zeilen zählt, einschließlich der Werte von NULL. Dies würde unsere Ergebnisse verfälschen. Die Compliance-Abteilung hat null Mitarbeiter, was beim Zusammenführen als NULL angezeigt worden wäre. COUNT(*) hätte diesen NULL als einen gezählt, was nicht korrekt wäre.

Die Option COUNT(e.id) ignoriert die Werte von NULL und zählt nur Mitarbeiter, deren ID nicht NULL ist. Dies ist eher ein Thema der Aggregatfunktion als ein Thema von LEFT JOIN, so dass wir nicht weiter ins Detail gehen werden.

Es ist jedoch äußerst wichtig zu verstehen, wann die verschiedenen COUNT() Optionen zu verwenden sind. Weitere Informationen finden Sie in unserem Artikel, in dem die verschiedenen Varianten und Verwendungen der Funktion COUNT() ausführlich beschrieben werden.

Zurück zu unserem Code. Nach dem Zählen und Zusammenführen wird die Ausgabe nach dem Abteilungsnamen gruppiert. Das Ergebnis ist die Liste der Abteilungen mit der Anzahl der Beschäftigten in jeder Abteilung:

department_namenumber_of_employees
Accounting6
Compliance0
Sales3

Das Ergebnis zeigt, dass es insgesamt neun Mitarbeiter in den Abteilungen des Unternehmens gibt: sechs in der Buchhaltung, null in der Compliance-Abteilung und drei im Vertrieb.

Was wäre, wenn wir INNER JOIN verwenden würden?

Führen wir nun die gleiche Abfrage durch, aber mit INNER JOIN.

SELECT d.department_name, 
	 COUNT(e.id) AS number_of_employees
FROM departments d
JOIN employees e
ON d.id = e.department_id
GROUP BY d.department_name;

Wird das Ergebnis anders ausfallen? Schauen wir mal.

department_namenumber_of_employees
Accounting6
Sales3

Das Ergebnis zeigt wieder, dass es neun Mitarbeiter in verschiedenen Abteilungen gibt. Was offensichtlich fehlt, ist die Tatsache, dass das Unternehmen eine Compliance-Abteilung hat, die in diesem Ergebnis nicht angezeigt wird.

Hätten wir INNER JOIN verwendet, wären wir zu dem Schluss gekommen, dass es nur zwei Abteilungen im Unternehmen gibt. LEFT JOIN war wiederum die richtige Wahl, da es (zumindest vorübergehend) eine Abteilung ohne Mitarbeiter geben kann.

Datensatz für Beispiel 4

In diesem Beispiel werden wir drei Tabellen verwenden. Die erste ist artists; sie enthält die folgenden Daten über Musikkünstler:

idartist_name
1Isaac Hayes
2Paul Simon
3Stevie Wonder
4George Benson

Erstellen Sie die Tabelle mit Hilfe der Abfrage hier.

Die nächste Tabelle ist albums:

idalbum_titleyear_releasedartist_idgrammy_category_id
1Caribou1974NULL2
2Still Crazy After All These Years197521
3Fulfillingness' First Finale197431
4Stranger to Stranger20162NULL
5The Wall1979NULL2
6Songs in the Key of Life197631
7Black Moses19711NULL
8Innervisions197431
9Shaft197112
10Let's Dance1983NULL2

Und hier ist die Abfrage zur Erstellung dieser Tabelle.

Die Abfrage für die dritte Tabelle ist hier. Die Tabelle heißt grammy_award. Es ist eine Liste der Kategorien für den Grammy Award. Sie hat nur zwei Kategorien: den Gewinner des besten Albums und den Nominierten für das beste Album.

idgrammy_category
1Album of the Year Winner
2Album of the Year Nominee

Beispiel 4: Liste aller Künstler, ihrer Alben und der Grammy Award Kategorie

LEFT JOIN kann auch verwendet werden, um mehr als zwei Tabellen zu verbinden, und wir werden sehen, wie in der folgenden Abfrage:

SELECT artist_name,
	 album_title,
	 grammy_category
FROM artists ar
LEFT JOIN albums al
ON ar.id = al.artist_id
LEFT JOIN grammy_award ga
ON al.grammy_category_id = ga.id;

Zunächst haben wir alle erforderlichen Spalten aufgelistet, um den Namen des Künstlers, den Titel des Albums, das Jahr der Veröffentlichung und die Kategorie des Grammy Awards anzuzeigen.

Aus den dargestellten Tabellen sehen wir, dass es Alben ohne Künstlerinformationen gibt. Da unser Katalog unvollständig ist, ist die sicherste Methode, alle verfügbaren Künstler aufzulisten, die Tabelle LEFT JOIN und die Tabelle artists als die linke Tabelle. Sie ist links mit der Tabelle albums über die Künstler-ID verbunden.

Um die Daten über die Grammys abzurufen, müssen wir die dritte Tabelle irgendwie verknüpfen. Wie wird das gemacht? Ganz einfach: Schreiben Sie den Befehl LEFT JOIN erneut und verweisen Sie auf die Tabelle grammy_award danach. Dadurch wird LEFT JOIN albums mit grammy_award. Die Tabellen werden über die Grammy-Kategorie-ID verbunden.

Schauen wir uns die Ausgabe an:

artist_namealbum_titlegrammy_category
Isaac HayesShaftAlbum of the Year Nominee
Isaac HayesBlack MosesNULL
Paul SimonStranger to StrangerNULL
Paul SimonStill Crazy After All These YearsAlbum of the Year Winner
Stevie WonderInnervisionsAlbum of the Year Winner
Stevie WonderSongs in the Key of LifeAlbum of the Year Winner
Stevie WonderFulfillingness' First FinaleAlbum of the Year Winner
George BensonNULLNULL

Das Ergebnis zeigt alle Künstler, ihre Alben und ob das Album für den Album of the Year Award nominiert war oder gewonnen hat. Außerdem werden die Alben angezeigt, die weder für den Grammy nominiert waren noch gewonnen haben.

Was wäre, wenn wir INNER JOIN verwenden würden?

Hier ist derselbe Code wie oben, mit JOIN anstelle von LEFT JOIN:

SELECT artist_name,
	 album_title,
	 grammy_category
FROM artists ar
JOIN albums al
ON ar.id = al.artist_id
JOIN grammy_award ga
ON al.grammy_category_id = ga.id;

Schauen wir uns an, was der Code zurückgibt:

artist_namealbum_titlegrammy_category
Isaac HayesShaftAlbum of the Year Nominee
Paul SimonStill Crazy After All These YearsAlbum of the Year Winner
Stevie WonderInnervisionsAlbum of the Year Winner
Stevie WonderSongs in the Key of LifeAlbum of the Year Winner
Stevie WonderFulfillingness' First FinaleAlbum of the Year Winner

Dieses Ergebnis ist unvollständig. Es fehlt ein Künstler: George Benson. Es fehlen auch die Alben ohne Grammy-Kategorie. Da wir nicht versuchten, nur die Alben mit einer Grammy-Kategorie aufzulisten, war die LEFT JOIN die richtige Wahl.

Hier sind einige zusätzliche Erklärungen, wie man mehrere Tabellen LEFT JOIN.

Anfängerecke: Einige Tipps zum Schreiben von JOINs

Hier finden Sie einen Überblick über die häufigsten Fehler, die Anfänger bei der Verwendung von LEFT OUTER JOIN in SQL machen.

Wir haben sie bereits in den Beispielen behandelt, aber für ein weniger erfahrenes Auge sind sie vielleicht nicht so offensichtlich. Lassen Sie uns diese also in Worte fassen.

Die Wahl des richtigen Join

Wir haben alle Beispiele von LEFT JOIN mit den Versionen von INNER JOIN verglichen. Wie Sie gesehen haben, ändert sich die Ausgabe erheblich. Deshalb müssen Sie sorgfältig auswählen, welche Verknüpfung Sie verwenden wollen.

Der beste Tipp ist, über diese beiden Join-Definitionen nachzudenken. Wenn Sie also nur Daten aus zwei Tabellen abgleichen müssen, dann brauchen Sie INNER JOIN. In allen anderen Fällen ist LEFT JOIN wahrscheinlich die richtige Wahl.

Entscheiden, welche Tabelle die linke ist

Wenn Sie sich für LEFT JOIN entschieden haben, woher wissen Sie dann, welche Tabelle die linke sein soll? Zunächst einmal ist die linke Tabelle die Tabelle, die unmittelbar nach FROM kommt. Die rechte Tabelle ist die Tabelle, die nach LEFT JOIN kommt.

Aber wie entscheiden Sie, welche die richtige ist? Sie müssen das Problem, das Sie lösen, richtig verstehen. Suchen Sie nach Hinweisen in der Formulierung und der Logik. Wenn Sie alle Mitarbeiter benötigen, ist die Tabelle mit den Mitarbeitern die linke. Mit anderen Worten: Wenn Sie glauben, dass eine Ihrer Tabellen unverändert angezeigt werden muss, ist das die linke Tabelle.

Seien Sie vorsichtig mit Aggregatfunktionen

Selbst wenn Sie einen Fehler machen und die falsche Verknüpfung wählen, ist es sehr wahrscheinlich, dass Sie dies in der Ausgabe bemerken, wenn Sie die Daten nicht aggregieren. Wenn Sie mit Ihren Daten vertraut sind, werden Sie feststellen, dass einige Zeilen fehlen oder dass es keine NULLs gibt, wo Sie sie erwartet hätten.

Seien Sie jedoch besonders vorsichtig, wenn Sie Aggregatfunktionen verwenden. Da die Ausgabe aggregiert wird, ist es sehr viel schwieriger, den Fehler in der Ausgabe zu erkennen - es sei denn, Sie kennen alle Ihre Datenaggregationsergebnisse auswendig, was sehr unwahrscheinlich ist. In diesem Fall würden Sie kein SQL benötigen, oder?

Dies gilt insbesondere für die Verwendung von COUNT(). Wie Sie in einem unserer Beispiele gesehen haben, kann COUNT(*) andere Ergebnisse liefern als COUNT(column_name). Es ist äußerst wichtig, dass Sie wissen, was Sie erreichen wollen und wie COUNT() funktioniert.

Denken Sie daran: COUNT(column_name) ignoriert die Werte von NULL, während COUNT(*) dies nicht tut!

Wenn Sie also mit Aggregatfunktionen arbeiten, testen Sie Ihre Abfrage mit INNER JOIN - wenn Sie die Möglichkeit dazu haben - und sehen Sie, ob sie andere Ergebnisse liefert. Wenn dies nicht der Fall ist, spielt es keine Rolle, welche Verknüpfung Sie verwenden. Wenn dies der Fall ist, gehen Sie zurück zu Ihrer Problemdefinition und sehen Sie, welche Verknüpfungslogik besser zu Ihrer Geschäftslogik passt.

Kaskadierende LEFT JOINs

Dies wird beobachtet, wenn mehr als zwei Tabellen verbunden werden. Wenn Sie sich für LEFT JOIN entscheiden, müssen Sie in der Regel alle anderen Tabellen auf LEFT JOIN verweisen.

Sie haben das in unserem letzten Beispiel gesehen, als wir zwei LEFT JOINs verwendet haben. Selbst wenn wir zuerst eine LEFT JOIN und dann eine INNER JOIN verwenden würden, bekämen wir nicht die Liste aller Künstler und die anderen Daten. Die Einbeziehung von INNER JOIN in diese Kette von Verknüpfungen führt zum gleichen Ergebnis wie die Verwendung von INNER JOIN anstelle der einzelnen LEFT JOIN.

Dies ist nicht immer der Fall. Aber es ist ziemlich sicher, diese Faustregel zu befolgen: Wenn Sie einen LEFT JOIN brauchen, brauchen Sie alle LEFT JOINs.

Möchten Sie noch mehr LEFT JOIN üben?

In diesem Artikel haben Sie einen Vorgeschmack darauf bekommen, was LEFT JOIN ist und wie man mit seinen gelegentlichen Tücken umgeht. Wir haben auch das Schreiben von Code geübt, während Sie sich mit der LEFT JOIN Syntax vertraut gemacht haben.

Um alle Nuancen von LEFT OUTER JOIN in SQL zu beherrschen, empfehlen wir mehr Übung. Drei Beispiele sind nicht genug! Um wirklich auf dem hier Gelernten aufzubauen, empfehlen wir unseren SQL-JOINs Kurs. Neben den theoretischen Grundlagen erhalten Sie auch jede Menge praktischer Übungen mit realen Szenarien.

Hier finden Sie einige zusätzliche Ideen zum Üben: SQL-JOINs. SQL-JOINs Interviewfragen sind ebenfalls eine wertvolle Ressource zum Üben von Materialien. Viel Spaß beim Lernen!