Zurück zur Artikelliste Artikel
7 Leseminuten

Was ist ein FULL JOIN und wann wird er verwendet?

Erfahren Sie, was ein FULL JOIN ist, wie man ihn implementiert, wie er im Vergleich zu den anderen Arten von SQL-JOINs funktioniert und welche einzigartigen Anwendungsfälle es gibt.

Bevor wir uns mit FULL JOINs beschäftigen, lassen Sie uns kurz rekapitulieren, was ein SQL JOIN ist. Im Kern kombiniert ein JOIN Daten aus zwei oder mehr Tabellen innerhalb einer Datenbank. Die Tabellen sind in der Regel durch eindeutige Bezeichner in jeder Tabelle miteinander verknüpft, d. h. durch Primär- und Fremdschlüssel.

Um eine einfache SQL JOIN - auch bekannt als INNER JOIN - in Aktion zu zeigen, betrachten wir die Products und OrderDetails Tabellen aus der bekannten Northwind-Beispieldatenbank. Die Tabelle Products Tabelle enthält eine Liste aller Produkte und die OrderDetails Tabelle enthält eine Liste aller letzten Bestellungen.

PRODUCTS
ProductIDProductNameSupplierIDCategoryIDUnitPrice
1Chais1110 boxes x 20 bags18
2Chang1124 - 12 oz bottles19
3Aniseed Syrup1212 - 550 ml bottles10
..................

ORDERDETAILS
OrderDetaiIDOrderIDProductIDQuantity
1102481112
2102484210
310248725
............

Hier ist die Abfrage:

SELECT 
Products.ProductName, OrderDetails.OrderID, OrderDetails.Quantity
FROM Products
JOIN OrderDetails 
ON Products.ProductID=OrderDetails.ProductID
ORDER BY Quantity Desc;

Und das Ergebnis:

ProductNameOrderIDQuantity
Pâté chinois10398120
Steeleye Stout10286100
Sirop d'érable1044090

Im obigen Beispiel wird ProductID (das in beiden Tabellen vorhanden ist) als Schlüssel verwendet, um die beiden Tabellen zu verknüpfen und jede Bestellung in absteigender Reihenfolge nach Quantity zu sortieren. Beachten Sie, dass eine einfache JOIN wie die obige nur übereinstimmende Zeilen aus den beiden Tabellen zurückgibt. In diesem Fall würden die Ergebnisse nur kürzlich bestellte Produkte und Bestellungen enthalten, die mit einer gültigen ProductID verknüpft sind.

FULL JOIN

FULL JOIN: Eine Einführung

Im Gegensatz zu INNER JOIN gibtFULL JOIN alle Zeilen aus den beiden verbundenen Tabellen zurück, unabhängig davon, ob sie eine übereinstimmende Zeile enthalten oder nicht. Daher wird ein FULL JOIN auch alsFULL OUTER JOIN bezeichnet. Ein FULL JOIN gibt nicht übereinstimmende Zeilen aus beiden Tabellen sowie die Überschneidung zwischen ihnen zurück. Wenn es für eine Zeile in der linken Tabelle keine übereinstimmenden Zeilen gibt, enthalten die Spalten der rechten Tabelle NULLs für diese Datensätze. Wenn für eine Zeile in der rechten Tabelle keine übereinstimmenden Zeilen vorhanden sind, enthalten die Spalten der linken Tabelle NULLs.

Um den Unterschied zwischen einer einfachen SQL JOIN und einer FULL OUTER JOIN zu demonstrieren, betrachten wir die Projects und Employees Tabellen wie unten gezeigt. Die Tabelle Projects enthält eine Liste aller vom Unternehmen durchgeführten Projekte (sowohl interne als auch ausgelagerte Projekte), während die Tabelle Employees Tabelle enthält eine Liste aller derzeitigen Mitarbeiter und gibt an, ob sie an einem Projekt des Unternehmens beteiligt sind.

PROJECTS
ProjectIDProjectNameCostYTDBusinessUnit
1CRM Upgrade45640Customer Relations
2Cybersecurity Protocol Implementation80200Cybersecurity
3HQ Office Renovations145000Facilities
4ERP Integration110000Corporate
5Database Stack Upgrade25000Engineering
............
15Automated QA10000Engineering

EMPLOYEES
EmployeeIDEmployeeNameProjectIDStartDateBusinessUnit
001Albert Ross32012-02-11Facilities
002Hummer BairdNULL2012-02-11Corporate
003Matthias Dias152012-07-15Engineering
004Al Cooper12014-04-15Customer Relations
005Macron RalfNULL2014-04-15Legal
...............
025Hamza ImranNULL2020-07-11Engineering

Wenn wir JOINs zwischen diesen beiden Tabellen durchführen würden, indem wir die Tabellen über ProjectID als Primärschlüssel abgleichen, wären die Ergebnisse einer einfachen INNER JOIN und einer FULL OUTER JOIN recht unterschiedlich. Eine INNER JOIN würde eine Tabelle ausgeben, die nur die Ergebnisse enthält, bei denen es eine Übereinstimmung zwischen den beiden entsprechenden Einträgen in beiden Tabellen gibt. Das Ergebnis von INNER JOIN enthält die Namen der Mitarbeiter und die entsprechenden Projektnamen:

EmployeeNameProjectName
Albert RossHQ Office Renovations
Matthias DiasAutomated QA
Al CooperCRM Upgrade

Eine FULL OUTER JOIN hingegen gibt die Daten beider Tabellen aus, unabhängig davon, ob es eine Übereinstimmung in der anderen Tabelle gibt:

EmployeeNameProjectName
Albert RossHQ Office Renovations
Hummer BairdNULL
Matthias DiasAutomated QA
Al CooperCRM Upgrade
.......
Hamza ImranNULL
NULLERP Integration

Das Ergebnis von FULL JOIN enthält alle Mitarbeiternamen, unabhängig davon, ob sie einem Projekt zugeordnet sind, und alle Projektnamen, auch wenn es keine Mitarbeiter gibt, die diesem Projekt zugeordnet sind.

FULL JOIN-Syntax

Die grundlegende Syntax einesFULL JOIN ist ähnlich wie bei anderen JOIN-Typen:

SELECT 
	left_table.column1, right_table.column2,...
FROM left_table
FULL OUTER JOIN right_table 
ON left_table.key = right_table.key;

Das Schlüsselwort OUTER ist optional und kann weggelassen werden.

Beispiel

Gehen wir nun noch einmal das Beispiel einer FULL OUTER JOIN durch, die sowohl EmployeeName als auch ProjectName enthält. Hier ist die Abfrage:

SELECT 
Employees.EmployeeName, Projects.ProjectName
FROM Employees
FULL OUTER JOIN Projects 
ON Employees.ProjectID=Projects.ProjectID
ORDER BY EmployeeID;

Und das Ergebnis:

EmployeeNameProjectName
Albert RossHQ Office Renovations
Hummer BairdNULL
Matthias DiasAutomated QA
Al CooperCRM Upgrade
.......
Hamza ImranNULL
NULLERP Integration

Aus der Ergebnistabelle geht hervor, dass eine FULL JOIN auch NULL-Ergebnisse aus den beiden Tabellen Projects und Employees Tabellen ausgibt - obwohl es in der anderen Tabelle keine Übereinstimmungen gab. NULLs in der Spalte ProjectName deuten darauf hin, dass der Mitarbeiter nicht speziell einem Projekt zugeordnet ist und wahrscheinlich andere Funktionen im Unternehmen ausübt. Andererseits deutet ein NULL-Wert in der Spalte EmployeeName darauf hin, dass das spezifische Projekt wahrscheinlich ausgelagert ist und nicht direkt von einem Mitarbeiter des Unternehmens geleitet wird. Alternativ könnte ein NULL-Wert auch auf einen möglichen Fehler oder eine versehentliche Datenlöschung in der Datenbank oder im System hinweisen. (Wir werden dies weiter unten näher erläutern.)

Es ist gut zu wissen, dass einige Datenbanken, wie MySQL, keine vollständigen Verknüpfungen unterstützen. In diesem Fall können Sie den OperatorUNION ALL verwenden, um dieLEFT JOIN undRIGHT JOIN zu kombinieren.

Unser früherer Artikel über SQL-JOINs enthält einige weitere Beispiele, die Sie untersuchen können. Unser SQL-JOINs Kurs bietet auch umfassende Beispiele für FULL JOINs und enthält praktische Übungen, um Ihre Kenntnisse zu vertiefen.

FULL JOIN Anwendungsfälle

Im Vergleich zu den anderen Arten von SQL-JOINs werden Sie FULL JOIN wahrscheinlich weniger häufig verwenden. Dennoch ist es ein sehr nützliches Werkzeug für einige wenige, einzigartige Situationen. Einige der Anwendungsfälle sind:

  • Abrufen aller Datensätze aus beiden Tabellen, unabhängig davon, ob es eine Übereinstimmung gibt oder nicht. Das ist das Beispiel, das wir oben gesehen haben.
  • Um nicht übereinstimmende oder verwaiste Daten in beiden Tabellen zu finden. Ein verwaister Datensatz ist ein Datensatz, dessen Fremdschlüsselwert auf einen nicht existierenden Primärschlüsselwert verweist; dies geschieht häufig in schnell skalierenden oder sehr alten Systemen.
  • Zur Ausführung von Ausnahmeberichten. Dabei handelt es sich um eine Form der Datenanalyse, bei der ein Datensatz mit einem gewünschten/erwarteten Basisdatensatz verglichen wird und Elemente hervorgehoben werden, die nicht übereinstimmen.

Obwohl die Anwendung von FULL JOINs ziemlich einzigartig ist, sind sie eine großartige Möglichkeit, potenzielle Datenintegritätsprobleme zu finden und zu diagnostizieren.

Arten von JOINs: Rekapitulation

Wie bereits erwähnt, gibt es noch einige weitere Arten von JOINs.

Ein INNER JOIN gibt Zeilen zurück, wenn die Bedingung JOIN sowohl in der linken als auch in der rechten Tabelle erfüllt ist. Mit anderen Worten, es werden nur die übereinstimmenden Datensätze aus den Tabellen zurückgegeben. Dies ist der häufigste Typ von SQL JOIN und die Standardeinstellung, wenn Sie den Typ von JOIN nicht angegeben haben.

Eine OUTER JOIN gibt alle Zeilen aus einer Tabelle und einige oder alle Zeilen aus einer anderen Tabelle zurück (je nach Typ von OUTER JOIN). Abgesehen von FULL OUTER JOIN gibt es zwei weitere Typen:

  • A LEFT OUTER JOIN gibt alle Zeilen aus der linken Tabelle zurück, auch wenn in der rechten Tabelle keine passenden Zeilen gefunden wurden. Wenn es keine übereinstimmenden Datensätze in der rechten Tabelle gibt, gibt die Abfrage NULL-Werte für diese Spalten zurück.
  • Ein RIGHT OUTER JOIN gibt alle Zeilen aus der richtigen Tabelle zurück. Wenn es keine passenden Datensätze in der linken Tabelle gibt, werden für diese Spalten NULL-Werte zurückgegeben - das Gegenteil von LEFT JOIN.

Eine CROSS JOIN (auch kartesische JOIN genannt) gibt jede mögliche Kombination von Zeilen aus den verknüpften Tabellen zurück. Da alle möglichen Kombinationen zurückgegeben werden, ist dies der einzige JOIN Typ, der keine JOIN Bedingung und somit keineON Klausel benötigt.

Einen detaillierteren Einblick in die einzelnen Typen von JOIN erhalten Sie in dem Artikel SQL JOIN typen erklärt. Außerdem behandelt unser SQL-JOINs Kurs alle verschiedenen Typen und Anwendungsfälle von JOINs sehr detailliert ab. Er geht auch auf fortgeschrittenere Themen ein, wie z. B. nicht-äqui JOINs und multiple JOINs.

JOINs sind eine der grundlegendsten und am häufigsten verwendeten Funktionen von SQL und ein wesentlicher Bestandteil des Werkzeugkastens eines jeden SQL-Benutzers. Sie werden auch häufig in Vorstellungsgesprächen gestellt; hilfreiche Tipps finden Sie in unserem Artikel Die 10 wichtigsten SQL JOIN interview fragen und wie man sie beantwortet.

Vertiefen Sie Ihr Wissen über SQL FULL JOINs

In diesem Tutorium haben Sie die Besonderheiten von SQL FULL JOINs und deren Hauptanwendungsfälle bei der Diagnose der Datenintegrität kennengelernt. Sie haben auch einen kurzen Vergleich zwischen FULL JOINs und den anderen JOIN-Typen gesehen.

Um FULL JOINs wirklich zu verstehen, müssen Sie ins kalte Wasser springen, einige Übungen machen und sich der Herausforderung stellen. Ich empfehle Ihnen dringend, unseren Kurs SQL-JOINs auszuprobieren, um die nächste Stufe dieser sehr wichtigen SQL-Funktion zu erreichen.