FULL JOIN
Joins & Mengen
Bedeutung
Der FULL JOIN (vollständig: FULL OUTER JOIN) kombiniert LEFT und RIGHT JOIN: Er liefert alle Zeilen beider Tabellen. Wo es einen passenden Treffer gibt, werden die Zeilen verbunden; wo nicht, füllt die Datenbank die fehlende Seite mit NULL auf. So siehst du auf einen Blick Kunden ohne Bestellung und Bestellungen ohne gültigen Kunden.
Syntax
SELECT spalten FROM tabelleA FULL OUTER JOIN tabelleB ON tabelleA.schluessel = tabelleB.schluessel;
Beispiel
SELECT k.Name, b.BestellID FROM Kunden k FULL OUTER JOIN Bestellungen b ON k.KundenID = b.KundenID;
| Name | BestellID |
|---|---|
| Müller GmbH | 1001 |
| Schmidt AG | 1002 |
| Dupont SARL | NULL |
| NULL | 1099 |
Dupont SARL hat keine Bestellung, Bestellung 1099 keinen gültigen Kunden – beide erscheinen trotzdem.
Stolperfalle: MySQL kennt kein FULL JOIN
MySQL und MariaDB unterstützen FULL OUTER JOIN nicht direkt (PostgreSQL und SQL Server schon). Du baust es dort mit UNION aus einem LEFT und einem RIGHT JOIN nach:
SELECT k.Name, b.BestellID FROM Kunden k LEFT JOIN Bestellungen b ON k.KundenID = b.KundenID UNION SELECT k.Name, b.BestellID FROM Kunden k RIGHT JOIN Bestellungen b ON k.KundenID = b.KundenID;
Das UNION entfernt dabei die doppelten Schnittmengen-Zeilen automatisch. Mehr dazu in der Lektion UNION.
Hinweis
FULL JOIN wird in der Praxis eher selten gebraucht – meist reicht ein LEFT JOIN. Verwende ihn gezielt, wenn du Datensätze aus beiden Tabellen abgleichen willst, die jeweils kein Gegenstück haben.