English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQL FULL JOIN Anweisung

In diesem Tutorial lernen Sie, wie Sie Daten mit SQL Full Join aus zwei Tabellen abrufen können.

Verwendung der vollständigen Verbindung

FULL JOIN gibt alle Zeilen der verknüpften Tabellen zurück, unabhängig davon, ob sie übereinstimmen, was bedeutet, dass die vollständige Verbindung eine Kombination aus LEFT JOINundRIGHT JOINfunktioniert. Eine vollständige Verbindung isteine Art äußerliche Verbindung, wird daher auchvollständige äußerliche Verbindung.

Das folgende Venn-Diagramm erläutert die Funktionsweise der vollständigen Verbindung.

Hinweis:Eine externe Verbindung ist eine Verbindung, die Zeilen im Ergebnisset enthält, selbst wenn die Zeilen in den beiden zu verbindenden Tabellen möglicherweise nicht übereinstimmen.

Um dies klar zu verstehen, sehen wir untenemployeesunddepartmentsTabelle.

+--------+--------------+------------+---------+
| emp_id | emp_name | einstellungsdatum | dept_id |
+--------+--------------+------------+---------+
|      1 | Ethan Hunt | 2001-05-01 |       4 |
|      2 | Tony Montana | 2002-07-15 |       1 |
|      3 | Sarah Connor | 2005-10-18 |       5 |
|      4 | Rick Deckard | 2007-01-03 |       3 |
|      5 | Martin Blank | 2008-06-24 | NULL |
+--------+--------------+------------+---------+

+---------+------------------+
| dept_id | abteilungsname |
+---------+------------------+
|       1 | Administration   |
|       2 | Kundendienst |
|       3 | Finance          |
|       4 | Menschressourcen |
|       5 | Sales            |
+---------+------------------+
Tabelle: employees
Tabelle: departments

Jetzt,angenommen, Sie möchten nur die Namen aller Mitarbeiter und die Namen der verfügbaren Abteilungen abrufen, unabhängig davon, ob es in der anderen Tabelle passende Zeilen gibt. In diesem Fall können Sie die vollständige Verbindung wie folgt verwenden.

Nachstehende Anweisung verbindet die Tabellen employee und department über das allgemeine Feld dept_id, um alle Abteilungen sowie detaillierte Informationen über alle Mitarbeiter abzurufen.

WÄHLEN t1.emp_id, t1.emp_name, t1.einstellungsdatum, t2.abteilungsname
FROM employees AS t1 VOLLSTÄNDIGE VERBINDUNG departments AS t2
ON t1.dept_id = t2.dept_id ORDER BY emp_name;

Einige Datenbanken (z.B. Oracle, MySQL) unterstützen keine vollständige Verbindung. In diesem Fall können Sie den Operator UNION ALL verwenden, um LEFT JOIN und RIGHT JOIN zu kombinieren, wie folgt:

WÄHLEN t1.emp_id, t1.emp_name, t1.einstellungsdatum, t2.abteilungsname
FROM employees AS t1 LINKSVERBINDUNG departments AS t2
ON t1.dept_id = t2.dept_id
UNION ALL
WÄHLEN t1.emp_id, t1.emp_name, t1.einstellungsdatum, t2.abteilungsname
FROM employees AS t1 RECHTSVERBINDUNG departments AS t2
ON t1.dept_id = t2.dept_id ORDER BY emp_name;

Nach Ausführung des obigen Befehls erhalten Sie die folgende Ausgabe:

+--------+--------------+------------+------------------+
| emp_id | emp_name | einstellungsdatum | abteilungsname |
+--------+--------------+------------+------------------+
| NULL | NULL | NULL | Kundendienst |
|      1 | Ethan Hunt | 2001-05-01 | Menschressourcen |
|      1 | Ethan Hunt | 2001-05-01 | Menschressourcen |
|      5 | Martin Blank | 2008-06-24 | NULL             |
|      4 | Rick Deckard | 2007-01-03 | Finance          |
|      4 | Rick Deckard | 2007-01-03 | Finance          |
|      3 | Sarah Connor | 2005-10-18 | Sales            |
|      3 | Sarah Connor | 2005-10-18 | Sales            |
|      2 | Tony Montana | 2002-07-15 | Administration   |
|      2 | Tony Montana | 2002-07-15 | Administration   |
+--------+--------------+------------+------------------+

Wie Sie sehen können, enthält das ErgebnisdepartmentsundemployeesAlle Zeilen in der Tabelle.

Tipp:In der Verbindungsabfrage ist die linke Tabelle diejenige, die im JOIN-Ausdruck am linksten auftaucht, und die rechte Tabelle ist diejenige, die im Ausdruck am rechten Ende auftritt.

Hinweis:Wenn bei der Ausführung externer Verbindungen der DBMS (Datenbankmanagementsystem) keine Zeilen matchen kann, platziert er NULL in den Spalten, um anzuzeigen, dass die Daten nicht vorhanden sind.