Zurück zur Artikelliste Artikel
8 Leseminuten

Was ist der OUTER JOIN in SQL?

Selbst wenn Sie SQL noch nicht kennen, ist Ihnen der Begriff OUTER JOIN sicher schon einmal begegnet. In diesem Artikel erkläre ich, was OUTER JOIN in SQL bewirkt. Anhand einiger praktischer Beispiele werde ich zeigen, wie er in alltäglichen SQL-Anwendungen verwendet wird.

Wenn Sie SQL für praktische Zwecke verwenden möchten, ist es äußerst wichtig, die verschiedenen JOINs zu kennen. Tatsächlich werden Sie in fast jeder zweiten Abfrage, die Sie schreiben, eine JOIN verwenden. Daher sollten Sie sich unbedingt mit ihnen vertraut machen.

Während dieser Artikel einige grundlegende Informationen über JOIN im Allgemeinen und OUTER JOIN im Besonderen enthält, empfehle ich ernsthaft Lernenden, den SQL-JOINs Kurs von LearnSQL.de zu besuchen. Es handelt sich um eine interaktive Gruppe von 93 praktischen Übungen, die in 5 Abschnitte unterteilt sind, und die Ihnen ein tiefes Verständnis von SQL JOINs vermitteln.

Lassen Sie uns also direkt in das Thema eintauchen und damit beginnen, was ein SQL JOIN tut.

Was ist ein JOIN?

Ein SQL JOIN wird verwendet, um Daten aus zwei oder mehr Tabellen zu kombinieren und dann eine einzige Ausgabetabelle zu erstellen, die ausgewählte Spalten aus beiden Tabellen enthält. Normalerweise verwenden Sie einen oder mehrere gemeinsame Werte in den Tabellen, um sie zu verknüpfen. In der Bedingung JOIN geben Sie an, wie Zeilen aus zwei Tabellen kombiniert werden sollen: Die Zeilen aus beiden Tabellen, die die Bedingung erfüllen, werden kombiniert und zur Ergebnistabelle hinzugefügt.

Nehmen wir zum Beispiel an, Sie haben eine Datenbank mit Kundeninformationen. Wenn sich ein Kunde bei Ihrem Unternehmen anmeldet, speichern Sie seine Daten (Customer_Number, Customer_Name, Age, Postal_Code und Address) in einer Tabelle namens customers. Die Details der Bestellungen, die der Kunde aufgibt, werden in einer anderen Tabelle namens ordersgespeichert, die die Tabellen Order_Number, Order_Date, Expected_Shipping_Date und Customer_Number enthält.

Stellen Sie sich vor, dass ein Kunde eine Bestellung aufgibt und Sie die Lieferadresse wissen müssen. Allerdings enthält die Tabelle orders enthält jedoch nur die Customer_Number. Um die Adresse des Kunden abzurufen, müssen Sie die Tabellen JOIN customers und orders auf der Grundlage von Customer_Number abfragen.

In diesem Fall dient Customer_Number als die Spaltenwerte, die Sie vergleichen.

customers:

Customer_NumberCustomer_NameAgePostal_CodeAddress
103Atelier274400054, RueRoyal
112Signal32830308489 Strong
114Collector273004636 Kilda
119La Roche274400067, rue chimay
121Baane mini324110Ering Shakkes

orders:

Order_NumberOrder_DateExpected_Shipping_DateCustomer_Number
1034531-01-202210-02-2022103
1034630-01-202215-02-2022112
1012005-02-202216-02-2022114
1032506-02-202210-02-2022121
1121108-02-202221-02-20224110

Hier ist die Abfrage, die Sie verwenden würden, um alle Bestellnummern mit den Namen und Adressen der Kunden zu verknüpfen:

SELECT 
  a.Order_Number, 
  b.Customer_Name, 
  b.Postal_Code, 
  b.Address 
FROM orders a 
JOIN customers b  
ON a.Customer_Number = b.Customer_Number;

Und hier ist das Ergebnis:

Order_NumberCustomer_NamePostal_CodeAddress
10345Atelier4400054, RueRoyal
10346Signal830308489 Strong
10120Collectors3004636 Kilda
10325Baane Mini4110Ering Shakkes

In dieser Abfrage wählt SQL die Spalten Order_Number aus der Tabelle orders und Customer_Name, Postal_Code und Address aus der Tabelle customers Customer_Number ist die Spalte, die in der Bedingung JOIN verwendet wird. Für jede Bestellung wird die entsprechende Kundennummer aus orders mit der Kundennummer in der Tabelle customers Tabelle verglichen. Der Kundenname, die Postleitzahl und die Adresse werden für diesen Auftrag abgerufen.

Dies ist ein klassisches Beispiel für einen INNER JOIN (auch bekannt als einfacher oder regulärer JOIN; das Schlüsselwort INNER ist optional). Es ist eine der am häufigsten verwendeten JOINs in SQL. INNER JOIN bedeutet im Grunde, dass nur die Zeilen abgerufen werden, deren Werte in den beiden Tabellen übereinstimmen. Beachten Sie, dass Zeilen mit der Kundennummer 119 (für die es keine entsprechenden Bestellungen gab) und der Bestellnummer 11211 (für die es keine entsprechende Kundennummer gab) nicht in das Ergebnis aufgenommen wurden.

INNER JOIN ist jedoch nicht die einzige JOIN, die SQL bietet. Es gibt mehrere Arten von OUTER JOIN, die Sie kennen sollten.

OUTER JOINS Erklärt

In SQL werden JOINs wie folgt kategorisiert:

  1. INNER JOIN - Gibt nur Zeilen zurück, deren Werte der JOIN Bedingung in beiden Tabellen entsprechen. Zeilen in beiden Tabellen, die dieser Bedingung nicht entsprechen, werden ignoriert.
  2. OUTER JOIN
    1. LEFT JOIN - Gibt alle Zeilen aus der linken Tabelle zurück (die Tabelle vor dem Schlüsselwort JOIN ). Für Zeilen, die eine Übereinstimmung in der rechten Tabelle haben, werden die Werte aus der rechten Tabelle zurückgegeben; für Zeilen ohne eine Übereinstimmung in der rechten Tabelle werden die fehlenden Werte mit NULLs aufgefüllt.
    2. RIGHT JOIN - Gibt alle Zeilen aus der rechten Tabelle zurück (die Tabelle nach dem Schlüsselwort JOIN ). Für Zeilen, die eine Übereinstimmung in der linken Tabelle haben, werden die Werte aus der linken Tabelle zurückgegeben; für Zeilen ohne eine Übereinstimmung in der linken Tabelle werden die fehlenden Werte mit NULLs aufgefüllt.
    3. FULL JOIN - Gibt alle Zeilen in beiden Tabellen zurück und verwendet NULLs für Werte ohne Übereinstimmung.

Für jede JOIN lautet die grundlegende SQL-Abfrage-Struktur:

<SELECT <list of columns>
FROM <table 1> 
LEFT/RIGHT/FULL/INNER JOIN <table 2> 
ON <join condition>
WHERE <other conditions>;

Hinweis: Anstelle des Schlüsselworts LEFT JOIN können Sie auch LEFT OUTER JOIN verwenden. Das Schlüsselwort OUTER ist optional. Ebenso können Sie RIGHT OUTER JOIN anstelle von RIGHT JOIN sowie FULL OUTER JOIN anstelle von FULL JOIN verwenden, ohne dass sich die Abfrageergebnisse ändern.

OUTER JOIN wird verwendet, um alle Datensätze aus Tabellen abzurufen, auch für die Datensätze, die keinen passenden Wert in der anderen Tabelle haben, basierend auf der JOIN Bedingung. In solchen Fällen wird NULL als Wert für die fehlenden Spalten zurückgegeben.

OUTER JOIN wird verwendet, um alle Datensätze aus Tabellen abzurufen, auch für die Datensätze, die keinen passenden Wert in der anderen Tabelle basierend auf der JOIN-Bedingung haben. In solchen Fällen gibt er NULL als Wert für die fehlenden Spalten zurück.

Wie bereits erwähnt, gibt es drei Arten von OUTER JOIN: LEFT OUTER JOIN, RIGHT OUTER JOIN und FULL OUTER JOIN. Ich möchte Ihnen anhand einiger Beispiele zeigen, wie sie funktionieren.

LEFT OUTER JOIN

Stellen Sie sich vor, Sie müssen alle Bestellungen zusammen mit den Kundeninformationen abrufen. Sie müssen aber auch die Bestellungen einschließen, die keine Kundeninformationen enthalten. In diesem Fall können Sie eine LEFT OUTER JOIN verwenden.

Abfrage:


SELECT 
  a.Order_Number, 
  b.Customer_Name, 
  b.Postal_Code 
FROM orders a 
LEFT JOIN customers b -- alternatively use LEFT OUTER JOIN instead of LEFT JOIN
ON a.Customer_Number = b.Customer_Number;

Ausgabe:

Order_NumberCustomer_NamePostal_CodeAddress
10345Atelier4400054, RueRoyal
10346Signal830308489 Strong
10120Collectors3004636 Kilda
10325Baane Mini4110Ering Shakkes

Da Sie in der Abfrage 'LEFT JOIN' angegeben haben, funktioniert diese Abfrage, indem zunächst alle Zeilen in der linken Tabelle und dann der entsprechende Wert in der rechten Tabelle abgerufen werden. Die linke Tabelle ist die vor dem Schlüsselwort JOIN angegebene Tabelle (hier die orders Tabelle). Die Abfrage gibt NULL in den Spalten der rechten Tabelle (Customer_Name, Postal_Code) für all jene Zeilen zurück, für die es keinen passenden Customer_Number-Wert in der Tabelle customers gibt. Beachten Sie, dass die Bestellnummer 11211 (die Bestellung ohne zugeordneten Kunden) in den Ergebnissen enthalten ist, mit NULL-Werten in den Spalten Customer_Name und Postal_Code.

RIGHT OUTER JOIN

Ein RIGHT OUTER JOIN funktioniert genau umgekehrt wie ein LEFT OUTER JOIN. Er holt alle Zeilen aus der rechten Tabelle (die nach dem Schlüsselwort JOIN angegebene Tabelle) und die entsprechenden Werte aus der linken Tabelle. Für alle Zeilen, für die es in der linken Tabelle keine Übereinstimmung gibt, gibt es NULLs. Sehen wir uns ein Beispiel an.

Abfrage:

SELECT 
  a.Order_Number, 
  b.Customer_Name, 
  b.Postal_Code 
FROM orders a 
RIGHT JOIN customers b -- alternatively use RIGHT OUTER JOIN instead of RIGHT JOIN
ON a.Customer_Number = b.Customer_Number;

Ausgabe:

Order_NumberCustomer_NamePostal_Code
10345Atelier44000
10346Signal83030
10120Collectors3004
10325Baane Mini4110
NULLLa Roche44000

Hier ist der Kunde (La Roche), der keine Bestellungen aufgegeben hat, in den Abfrageergebnissen enthalten; die Bestellung ohne Kunden wurde ausgelassen. Das liegt daran, dass wir eine RIGHT OUTER JOIN verwendet haben; alle Datensätze aus der rechten (customers) Tabelle wurden einbezogen.

FULL OUTER JOIN

Was aber, wenn Sie alle Zeilen aus beiden Tabellen haben wollen? Verwenden Sie FULL OUTER JOIN. Diese JOIN gibt alle Zeilen aus beiden Tabellen zurück, wobei jeder Zeilenwert, der in der anderen Tabelle nicht vorhanden ist, durch NULL ersetzt wird.

Abfrage:

SELECT 
  a.Order_Number, 
  b.Customer_Name, 
  b.Postal_Code 
FROM orders a 
FULL JOIN customers b --alternatively use ‘FULL OUTER JOIN’ instead of ‘FULL JOIN’
ON a.Customer_Number = b.Customer_Number;

Ausgabe:

Die Ergebnisse enthalten sowohl den Kunden La Roche (der keine Bestellungen hat) als auch die Bestellung 11211 (die keine Kundeninformationen hat).

Unterschied zwischen INNER und OUTER JOIN

Wie Sie vielleicht schon herausgefunden haben, besteht der Hauptunterschied zwischen INNER JOIN und OUTER JOIN darin, ob die Zeilen, für die wir keine Übereinstimmung in der anderen Tabelle haben, einbezogen werden sollen. Während INNER JOIN nur die Zeilen zurückgibt, für die es eine Übereinstimmung zwischen den beiden Tabellen gibt, gibt OUTER JOIN (je nach Typ) auch die Zeilen zurück, für die es keine passende Zeile in der anderen Tabelle gibt.

Sind Sie bereit, OUTER JOIN in Ihren Abfragen zu verwenden?

Ich hoffe, dieser Artikel hat Ihnen einen guten Einblick in die Verwendung von OUTER JOIN gegeben. Wenn Sie weiter in die Verwendung von SQL JOINs eintauchen möchten, besuchen Sie den SQL-JOINs Kurs, den ich bereits erwähnt habe. Wenn Sie Ihre SQL-Lernreise gerade erst beginnen, empfehle ich Ihnen den SQL von A bis Z Kurs empfehlen. Er enthält 7 SQL-Kurse, die Sie von den Grundlagen bis zu fortgeschrittenem SQL führen. Er eignet sich hervorragend, um eine solide Grundlage in dieser Sprache zu schaffen.

Wie auch immer, wie in jedem anderen Bereich auch, ist kontinuierliches Lernen der Schlüssel zum Erfolg. Also, alles Gute und viel Spaß beim Lernen!