🧚 Hör mal! Beekeeper Studio ist eine schnelle, moderne Open-Source-Datenbank-GUI Download
2. Januar 2024 Von Matthew Rathbone

Bei SQL geht es oft darum, die richtigen Fragen zu stellen. Wenn deine Daten über mehrere Tabellen verteilt sind, ist der Full Outer Join unbestreitbar praktisch. In manchen Datenbanksystemen ist er gang und gäbe, in MySQL ist das Konzept des FULL OUTER JOIN aber etwas kniffliger. Warum? Weil er nicht nativ unterstützt wird. Spannend, oder? Aber keine Sorge, es gibt einen Workaround!

In diesem Tutorial schauen wir uns ausführlich an, wie du einen Full Outer Join in MySQL umsetzt. Anschnallen, Leute – gleich tauchen wir in einen Pool voller Codebeispiele ein.

🔖 Kurzreferenz: Du brauchst schnell einen Überblick über alle JOIN-Typen? Schau dir unser SQL JOIN Cheat Sheet mit Diagrammen und Codebeispielen an.

Was ist ein Full Outer Join?

Bevor wir loslegen, klären wir, was ein FULL OUTER JOIN ist. In SQL kombiniert ein Full Outer Join die Wirkung von Left und Right Outer Join. Anders gesagt: Er liefert die Datensätze mit übereinstimmenden Werten in beiden Tabellen sowie alle Datensätze aus beiden Tabellen, deren Werte in der jeweils anderen Tabelle nicht vorkommen.

Visualisierung eines Full Outer Join

Ein Beispiel: Nehmen wir an, wir haben zwei Tabellen, Employees und Departments.

Tabelle Employees:

id name
1 Alice
2 Bob
3 Charlie

Tabelle Departments:

id department
2 HR
3 IT
4 Marketing

Mit der FULL OUTER JOIN-Abfrage:

SELECT * FROM Employees
FULL OUTER JOIN Departments ON Employees.id = Departments.id;

Die Ergebnismenge sieht so aus:

Employees.id Employees.name Departments.id Departments.department
1 Alice NULL NULL
2 Bob 2 HR
3 Charlie 3 IT
NULL NULL 4 Marketing

Diese Ausgabe vereint alle Datensätze aus Employees und Departments. Sie enthält:

  • Datensätze mit übereinstimmenden id-Werten in beiden Tabellen (Bob und Charlie).
  • Datensätze aus Employees ohne passenden Datensatz in Departments (Alice).
  • Datensätze aus Departments ohne passenden Datensatz in Employees (Marketing).

So nützlich diese Syntax ist, MySQL unterstützt sie nicht direkt. Wie kommen wir also weiter? Finden wir es heraus.

Full Outer Join in MySQL simulieren

Wie oben erwähnt, unterstützt MySQL das Schlüsselwort FULL OUTER JOIN nicht explizit. Trotzdem erreichen wir das gewünschte Ergebnis mit einer Kombination aus LEFT JOIN und UNION

Die Simulation eines Full Outer Join in MySQL besteht aus zwei Schritten:

  • Führe einen LEFT JOIN auf die erste Tabelle aus, um alle Datensätze der ersten Tabelle samt passenden Datensätzen aus der zweiten Tabelle zu erhalten.
  • Kombiniere das Ergebnis per UNION mit dem Ergebnis eines RIGHT JOIN, um alle Datensätze der zweiten Tabelle samt passenden Datensätzen aus der ersten Tabelle zu erhalten.

So funktionieren die einzelnen Bausteine:

Left Join:
Visualisierung eines Left Join

Right Join:
Visualisierung eines Right Join

Beispiel für einen Full Outer Join in MySQL

Hier ein Beispiel für den Workaround mit denselben Daten wie zuvor

SELECT 
    Employees.id AS Employees_id, 
    Employees.name, 
    Departments.id AS Departments_id, 
    Departments.department
FROM 
    Employees
LEFT JOIN 
    Departments ON Employees.id = Departments.id

UNION

SELECT 
    Employees.id AS Employees_id, 
    Employees.name, 
    Departments.id AS Departments_id, 
    Departments.department
FROM 
    Departments
RIGHT JOIN 
    Employees ON Departments.id = Employees.id;

Diese Abfrage besteht aus zwei Teilen:

  1. Einem LEFT JOIN, der alle Datensätze aus der Tabelle Employees und die passenden Datensätze aus der Tabelle Departments holt.
  2. Einem RIGHT JOIN, der alle Datensätze aus der Tabelle Departments und die passenden Datensätze aus der Tabelle Employees holt.

UNION kombiniert die Ergebnisse beider Abfragen und entfernt dabei doppelte Zeilen.

Mit denselben Beispieltabellen sieht die Ergebnismenge so aus:

Employees_id name Departments_id department
1 Alice NULL NULL
2 Bob 2 HR
3 Charlie 3 IT
NULL NULL 4 Marketing

Wie der FULL OUTER JOIN in SQL vereint diese Ausgabe alle Datensätze aus Employees und Departments.

UNION filtert Duplikate automatisch

Im konkreten Fall unseres Beispiels mit den Tabellen Employees und Departments führt das UNION im MySQL-Workaround für einen FULL OUTER JOIN zu keinen Duplikaten. Denn der Operator UNION entfernt doppelte Zeilen automatisch aus seiner Ergebnismenge.

Zur Verdeutlichung schauen wir uns an, wie UNION hier funktioniert:

  • Der erste Teil der Abfrage (der LEFT JOIN) holt alle Datensätze aus der Tabelle Employees und die passenden Datensätze aus der Tabelle Departments. Dazu gehören Zeilen mit übereinstimmenden id-Werten in beiden Tabellen sowie Zeilen aus Employees ohne Treffer in Departments.

  • Der zweite Teil der Abfrage (der RIGHT JOIN) holt alle Datensätze aus der Tabelle Departments und die passenden Datensätze aus der Tabelle Employees. Dazu gehören Zeilen mit übereinstimmenden id-Werten in beiden Tabellen sowie Zeilen aus Departments ohne Treffer in Employees.

Da UNION Duplikate entfernt, erscheinen die Zeilen mit übereinstimmenden id-Werten (also die, die sowohl im LEFT JOIN- als auch im RIGHT JOIN-Ergebnis auftauchen würden) nur einmal im Endergebnis.

Kurz gesagt: UNION sorgt hier dafür, dass jede eindeutige Kombination aus Employees- und Departments-Daten nur einmal in der Ergebnismenge vorkommt – und bildet so das Verhalten eines FULL OUTER JOIN ohne Duplikate nach.

Übe mit Beekeeper Studio

Ich hoffe, dieses Tutorial zum Full Outer Join in MySQL hat dir geholfen. In kommenden Beiträgen schauen wir uns weitere fortgeschrittene MySQL-Features an, mit noch mehr Codebeispielen und einem tieferen Blick darauf, warum und wie sie funktionieren. Bis dahin: Trainiere weiter deine SQL-Skills, am besten mit Beekeeper Studio.

Beekeeper Studio ist eine kostenlose & quelloffene Datenbank-GUI

Das beste SQL-Abfrage- & Editor-Tool, das ich je benutzt habe. Es bietet alles, was ich zum Verwalten meiner Datenbank brauche. - ⭐⭐⭐⭐⭐ Mit

Beekeeper Studio ist schnell, intuitiv und einfach zu bedienen. Beekeeper unterstützt jede Menge Datenbanken und läuft hervorragend auf Windows, Mac und Linux.

Die Linux-Version von Beekeeper hat 100% des Funktionsumfangs, ohne Abstriche und ohne Kompromisse.

Was Nutzer über Beekeeper Studio sagen

★★★★★
„Beekeeper Studio hat meinen alten SQL-Workflow komplett ersetzt. Es ist schnell, intuitiv und macht die Arbeit mit Datenbanken wieder zum Vergnügen.“
— Alex K., Datenbankentwickler
★★★★★
„Ich habe viele Datenbank-GUIs ausprobiert, aber Beekeeper trifft die perfekte Balance zwischen Funktionsumfang und Einfachheit. Es funktioniert einfach.“
— Sarah M., Full-Stack-Entwicklerin

Bereit, deinen SQL-Workflow zu verbessern?

download Kostenlos herunterladen