Der SQL FULL OUTER JOIN verbindet alle Daten aus der linken und rechten Tabelle und gibt alle Zeilen aus beiden Tabellen wieder.
SELECT Spalte
FROM TabelleA
FULL OUTER JOIN TabelleB
ON TabelleA.Spalte = TabelleB.Spalte;
Der FULL OUTER JOIN ist eine Kombination aus dem LEFT JOIN und dem RIGHT JOIN. Mit ihm geben wir also die Zeilen beider Tabellen aus. Die Zeilen, die sich in den ON-Spalten überschneiden, werden als eine Zeile ausgegeben. Die Zeilen, die sich nicht überschneiden enthält für die Spalten der anderen Tabelle nur NULL Werte.
FULL OUTER JOIN - Beispiel
Die Personalabteilung der DataMines GmbH möchte eine Gesamtübersicht aller Abteilungen haben. In der Datenbank sind die Tabellen Personal und Abteilungen getrennt.
Personal | ||
Name | Geschlecht | Abteilungs_ID |
Max Mustermann | M | 1 |
Erika Musterfrau | M | 2 |
Frauke Herrmann | W | 3 |
Abteilung | |
Abteilungs_ID | Abteilungsname |
2 | Cyber Security |
3 | Marketing |
4 | Business Intelligence |
SELECT *
FROM Personal
FULL OUTER JOIN Abteilung
ON Personal.Abteilung_ID = Abteilung.Abteilung_ID;
Name | Geschlecht | Abteilungs_ID | Abteilungs_ID | Abteilungsname |
Max | M | 1 | (null) | (null) |
Erika Musterfrau | M | 2 | 2 | Cyber Security |
Frauke | W | 3 | 3 | Marketing |
(null) | (null) | (null) | 4 | Business Intelligence |
Man erkennt, dass niemand in der Business Intelligence Abteilung arbeitet. Der Mitarbeiter Max Mustermann ist keiner Abteilung zugeteilt.
FULL OUTER JOIN in MySQL
MySQL unterstützt den FULL OUTER JOIN nicht. Anstelle dessen müssen ein LEFT JOIN und ein RIGHT JOIN derselben Tabellen über einen UNION Befehl miteinander verbunden werden:
SELECT Spalte FROM TabelleA
LEFT JOIN TabelleB ON (TabelleA.Spalte_X = TabelleB.Spalte_Y)
UNION
SELECT Spalte FROM TabelleA
RIGHT JOIN TabelleB ON (TabelleA.Spalte_X = TabelleB. Spalte_Y);