Und wie passen LEFT JOIN
, RIGHT JOIN
und FULL JOIN
dazu?
Vorausgesetzt, Sie verknüpfen Spalten ohne Duplikate, was ein sehr häufiger Fall ist:
Eine innere Verknüpfung von A und B ergibt das Ergebnis von A intersect B, d. h. den inneren Teil einer Venn-Diagramm-Kreuzung.
Eine äußere Verknüpfung von A und B ergibt das Ergebnis von A union B, d. h. die äußeren Teile einer Venn-Diagramm-Vereinigung.
Beispiele
Angenommen, Sie haben zwei Tabellen mit jeweils einer Spalte und folgenden Daten:
A B
- -
1 3
2 4
3 5
4 6
Beachten Sie, dass (1,2) nur für A, (3,4) für alle und (5,6) nur für B gelten.
Innere Verknüpfung
Eine innere Verknüpfung mit einer der beiden gleichwertigen Abfragen ergibt die Schnittmenge der beiden Tabellen, d. h. die beiden gemeinsamen Zeilen.
select * from a INNER JOIN b on a.a = b.b;
select a.*, b.* from a,b where a.a = b.b;
a | b
--+--
3 | 3
4 | 4
Linker äußerer Join
Eine linke äußere Verknüpfung ergibt alle Zeilen in A und alle gemeinsamen Zeilen in B.
select * from a LEFT OUTER JOIN b on a.a = b.b;
select a.*, b.* from a,b where a.a = b.b(+);
a | b
--+-----
1 | null
2 | null
3 | 3
4 | 4
Rechte äußere Verknüpfung
Eine rechte äußere Verknüpfung ergibt alle Zeilen in B sowie alle gemeinsamen Zeilen in A.
select * from a RIGHT OUTER JOIN b on a.a = b.b;
select a.*, b.* from a,b where a.a(+) = b.b;
a | b
-----+----
3 | 3
4 | 4
null | 5
null | 6
Vollständige äußere Verknüpfung
Eine vollständige äußere Verknüpfung liefert die Vereinigung von A und B, d. h. alle Zeilen in A und alle Zeilen in B. Wenn etwas in A kein entsprechendes Datum in B hat, dann ist der B-Teil null und umgekehrt.
select * from a FULL OUTER JOIN b on a.a = b.b;
a | b
-----+-----
1 | null
2 | null
3 | 3
4 | 4
null | 6
null | 5
Eine innere Verknüpfung zeigt nur dann Zeilen an, wenn es auf der anderen (rechten) Seite der Verknüpfung einen passenden Datensatz gibt.
Eine (linke) äußere Verknüpfung zeigt Zeilen für jeden Datensatz auf der linken Seite an, auch wenn es keine übereinstimmenden Zeilen auf der anderen (rechten) Seite der Verknüpfung gibt. Wenn es keine übereinstimmende Zeile gibt, zeigen die Spalten auf der anderen (rechten) Seite NULL an.
Innere Joins setzen voraus, dass ein Datensatz mit einer verwandten ID in der verbundenen Tabelle vorhanden ist.
Outer-Joins geben Datensätze für die linke Seite zurück, auch wenn für die rechte Seite nichts existiert.
Sie haben zum Beispiel eine Tabelle "Aufträge" und eine Tabelle "Auftragsdetails". Sie sind durch eine "OrderID" verbunden.
Bestellungen
BestellungDetails
Die Anfrage
SELECT Orders.OrderID, Orders.CustomerName
FROM Orders
INNER JOIN OrderDetails
ON Orders.OrderID = OrderDetails.OrderID
wird nur Bestellungen zurückgeben, die auch etwas in der Tabelle OrderDetails enthalten.
Wenn Sie es in OUTER LEFT JOIN ändern
SELECT Orders.OrderID, Orders.CustomerName
FROM Orders
LEFT JOIN OrderDetails
ON Orders.OrderID = OrderDetails.OrderID
ändern, werden Datensätze aus der Tabelle Orders zurückgegeben, auch wenn sie keine OrderDetails-Datensätze enthalten.
Sie können dies verwenden, um Bestellungen zu finden, die keine OrderDetails haben, was auf eine mögliche verwaiste Bestellung hinweist, indem Sie eine Where-Klausel wie "WHERE OrderDetails.OrderID IS NULL" hinzufügen.