Zurück zur Artikelliste Artikel
11 Leseminuten

Was ist FULL JOIN in SQL? Eine Erläuterung mit 4 Beispielen

Was ist ein FULL JOIN - einer der oft vernachlässigten SQL-Join-Typen? In diesem Artikel zeigen wir Ihnen, wie nützlich FULL JOIN sein kann und lehren Sie, wie Sie ihn in verschiedenen Szenarien anwenden können. Die vier Beispiele decken einige der typischen Anwendungen ab.

Ein SQL-Join ist eine Konstruktion zur Kombination von Daten aus zwei oder mehr Tabellen. Der FULL JOIN ist eine der Arten von Verknüpfungen. Sie werden am meisten von diesem Artikel profitieren, wenn Sie bereits mit SQL-Joins und deren Funktionsweise vertraut sind. Wenn nicht oder wenn Sie Ihr Wissen auffrischen müssen, empfehlen wir Ihnen unseren interaktiven SQL-JOINs Kurs, um die Lücken zu schließen. Dort erwarten Sie dreiundneunzig Übungen, in denen Sie Join-Typen rekapitulieren und das Filtern von Daten mithilfe von Einfach- und Mehrfach-Joins, Self-Joins und Non-Equi-Joins üben können.

Was ist ein FULL JOIN?

FULL JOIN oder FULL OUTER JOIN (SQL akzeptiert beide) ist eine äußere Verknüpfung. In SQL ist eine äußere Verknüpfung eine Art von Verknüpfung, die nicht übereinstimmende Zeilen aus einer oder beiden verknüpften Tabellen enthält; LEFT JOIN und RIGHT JOIN sind ebenfalls äußere Verknüpfungen. FULL JOIN ist eine Vereinigung von LEFT JOIN und RIGHT JOIN: Er zeigt die übereinstimmenden und die nicht übereinstimmenden Zeilen aus beiden Tabellen. Wenn die Werte aus einer Tabelle in der anderen Tabelle nicht übereinstimmen, gibt FULL JOIN NULL s zurück:

FULL JOIN in SQL

FULL JOIN Syntax

Die Syntax von FULL JOIN lautet:

SELECT …
FROM table1
FULL JOIN table2
ON table1.column = table2.column;

Wie bei SQL-Joins üblich, bestehen die Hauptbestandteile der FULL JOIN -Syntax aus den Klauseln JOIN und ON. Auf die erste Tabelle in der Klausel FROM folgt das Schlüsselwort FULL JOIN, mit dem die zweite Tabelle verbunden wird. Die Bedingung, unter der die Tabellen verbunden werden, wird in der ON Klausel angegeben. Normalerweise werden Tabellen über eine gemeinsame Spalte verbunden, z. B. die Spalte id in der Tabelle writer Tabelle und die writer_ID Spalte in der book Tabelle. Diese beiden Spalten haben aufgrund der Primärschlüssel-Fremdschlüssel-Beziehung die gleichen Werte.

In einem einfachen Beispiel könnten wir diesen Code schreiben und das folgende Ergebnis erhalten:

Andere Arten von Verknüpfungen in SQL

Wir haben bereits erwähnt, dass FULL JOIN nur eine von mehreren Arten von Joins in SQL ist. Hier ist die vollständige Liste:

  • (INNER) JOIN
  • LEFT (OUTER) JOIN
  • RIGHT (OUTER) JOIN
  • FULL (OUTER) JOIN
  • CROSS JOIN

JOIN (oder INNER JOIN) ist ein innerer Join-Typ, der nur die übereinstimmenden Zeilen aus den verbundenen Tabellen zurückgibt. Mehr über INNER JOIN können Sie hier erfahren.

LEFT JOIN (oder LEFT OUTER JOIN) listet alle Zeilen aus der ersten (linken) Tabelle und nur die übereinstimmenden Zeilen aus der zweiten (rechten) Tabelle auf. Wenn es keine übereinstimmenden Zeilen in der rechten Tabelle gibt, werden die Werte als NULL angezeigt. Mehr dazu finden Sie in unserem Artikel über LEFT JOIN.

RIGHT JOIN (oder RIGHT OUTER JOIN) ist das Spiegelbild von LEFT JOIN. Er gibt alle Zeilen aus der zweiten (rechten) Tabelle und nur die übereinstimmenden Zeilen aus der ersten (linken) Tabelle zurück. Wenn es in der linken Tabelle nicht übereinstimmende Zeilen gibt, sind die Werte NULL.

Jetzt können Sie besser verstehen, warum wir gesagt haben, dass FULL JOIN die Vereinigung von LEFT JOIN und RIGHT JOIN ist. Da alle Daten aus der linken und der rechten Tabelle und auch die nicht übereinstimmenden Zeilen angezeigt werden, ist es so, als ob Sie LEFT JOIN und RIGHT JOIN gleichzeitig verwenden.

CROSS JOIN gibt ein kartesisches Produkt zurück. Mit anderen Worten, es gibt alle Kombinationen aller Zeilen aus den beiden verbundenen Tabellen zurück.

FULL JOIN Beispiele

Gehen wir nun zu den Beispielen über, die die typische Verwendung von FULL JOIN zeigen.

Beispiel 1: Alle Mitarbeiter und Abteilungen des Unternehmens anzeigen

Aufgabe: Sie müssen alle Mitarbeiter eines Unternehmens anzeigen, auch wenn sie keine zugewiesene Abteilung haben. Außerdem sollen alle Abteilungen angezeigt werden, auch wenn ihnen keine Mitarbeiter zugeordnet sind.

Datensatz: Wir verwenden zwei Tabellen, um das Problem zu lösen. Die erste Tabelle ist Abteilung (das Skript finden Sie hier), die eine Liste der Abteilungen des Unternehmens enthält:

iddepartment_name
1IT
2Accounting
3Sales

Die zweite Tabelle ist die Tabelle " Mitarbeiter" mit den unten aufgeführten Daten. Das Skript finden Sie hier:

idfirst_namelast_namedepartment_id
1SarahZimmerman2
2ThomasTyson1
3DanielRichardson1
4SofiaTardelli2
5MarkFitzpatrick4

Lösung:

SELECT 
  first_name,
  last_name,
  department_name
FROM employees e
FULL JOIN department d
  ON e.department_id = d.id;

Erläuterung: Der Code wählt die Vor- und Nachnamen der Mitarbeiter sowie den Abteilungsnamen aus.

Das ist möglich, weil die beiden Tabellen unter FULL JOIN zu finden sind. Wir verweisen auf die Tabelle employees in FROM und geben ihr einen Alias. Dann verweisen wir auf die zweite Tabelle, departmentin FULL JOIN. Die Tabellen werden anhand der Abteilungs-IDs, die in beiden Tabellen zu finden sind, verbunden. Diese Verknüpfungsbedingung ist in der Klausel ON enthalten.

Ausgabe: Die Ausgabe liefert alle Daten aus beiden Tabellen. Es gibt einige interessante Zeilen, die näher erläutert werden müssen.

Mark Fitzpatrick hat keine Abteilung - sein department_id Wert ist 5, aber es gibt keine Abteilung mit der ID 5 in der Tabelle department. Daher steht unter dem Abteilungsnamen ein NULL-Wert. Dies könnte daran liegen, dass er ein neuer Mitarbeiter ist und die employees Tabelle nicht mit den Abteilungsdaten aktualisiert wurde.

Außerdem wird in der letzten Zeile die Abteilung "Vertrieb" angezeigt, aber kein Name des Mitarbeiters. Dies bedeutet, dass die Abteilung Vertrieb keine Mitarbeiter hat. Dies ist nichts Ungewöhnliches, da wir gehört haben, dass alle drei Mitarbeiter der Abteilung Vertrieb vor kurzem das Unternehmen verlassen haben.

first_namelast_namedepartment_name
SarahZimmermanAccounting
ThomasTysonIT
DanielRichardsonIT
SofiaTardelliAccounting
MarkFitzpatrickNULL
NULLNULLSales

Beispiel 2: Alle Kunden mit der Anzahl der gekauften Produkte und der Anzahl der Produkte ohne Verkauf anzeigen

Aufgabe: Es gibt einen Internet-Schallplattenladen, der Vinyls (d.h. Musikplatten) verkauft. Ihre Aufgabe ist es, alle Kunden aufzulisten und die Anzahl der Schallplatten zu ermitteln, die jeder Kunde gekauft hat. Die Ausgabe muss auch die Anzahl der Schallplatten anzeigen, die noch niemand gekauft hat.

Datensatz: Wir werden mit drei Tabellen arbeiten. Die erste ist customermit dem Skript hier:

idfirst_namelast_name
1MarvinSimmons
2MarianneDickens
3SusanStrozzi

Das Skript für die zweite Tabelle, vinyl, finden Sie hier. Die Tabelle zeigt die Liste der Vinyls, wie Sie unten sehen können:

idartistalbum_nameprice
1Callier, TerryWhat Color is Love24.99
2Guy, BuddySweet Tea32.99
3Little SimzA Curious Tale of Trials32.99
4LaVette, BettyeScene of the Crime36.99

Die dritte Tabelle ist eine Kreuzungstabelle namens purchase. Das Skript finden Sie hier:

idcustomer_idvinyl_idpurchase_date
1122023-01-03
2132023-01-12
3122023-02-18
4132023-03-01
5232023-03-01
6222023-04-01
7242023-05-01

Lösung:

SELECT 
  first_name,
  last_name,
  COUNT (v.id) AS vinyl_count	   
FROM customer c
FULL JOIN purchase p
  ON c.id = p.customer_id
FULL JOIN vinyl v
  ON p.vinyl_id = v.id
GROUP BY first_name, last_name;

Erläuterung: Dies ist ein Beispiel für die Verwendung von FULL JOIN sowie für die Verknüpfung von mehr als zwei Tabellen.

Die Abfrage wählt Kundennamen aus. Dann wird die Aggregatfunktion COUNT() verwendet, um die Anzahl der gekauften Vinyls zu ermitteln. FULL JOIN die customer Tabelle mit der purchase Tabelle. Dies geschieht anhand der Kunden-IDs in beiden Tabellen.

Nun müssen wir die dritte Tabelle verknüpfen. Das ist ganz einfach: Schreiben Sie wieder FULL JOIN und verweisen Sie auf die Tabelle vinyl. Jetzt können Sie sie mit der Tabelle purchase über die Vinyl-IDs verknüpfen.

Ausgabe: Die Ausgabe zeigt, dass es eine Schallplatte gibt, die noch niemand bestellt hat. Sie können sie an den NULLen erkennen.

Sie zeigt auch eine Liste aller Kunden und die Anzahl der von ihnen gekauften Schallplatten. Susan Strozzi hat nichts gekauft. Marianne Dickens und Marvin Simmons haben drei bzw. vier Vinyls gekauft.

first_namelast_namevinyl_count
NULLNULL1
SusanStrozzi0
MarianneDickens3
MarvinSimmons4

Beispiel 3: Auflistung aller Schüler-Zertifikatspaare und der Noten der Schüler

Aufgabe: Sie arbeiten für eine Online-SQL-Zertifizierungsplattform. Sie bietet mehrere Zertifizierungen an; jedes Jahr gibt es eine neue Ausgabe jeder Zertifizierung. Finden Sie alle möglichen Schüler-Zertifizierungs-Paare und die Note, die jeder Schüler in allen Ausgaben der Zertifizierung erhalten hat.

Datensatz: Der Datensatz wird immer größer; er umfasst jetzt vier Tabellen. Die erste Tabelle ist student; hier ist das Skript. Es ist eine Liste der Studenten der Plattform:

unsere Vinyls, beziehungsweise.

idfirst_namelast_name
1TomFrank
2MaryMaddison
3PavelKuba
4AmandaWilson

Die zweite Tabelle ist die Zertifikatstabelle, die die Liste der Zertifikate enthält. Hier ist das Skript:

idcertificate_name
1Microsoft Certified: Azure Data Fundamentals
2Oracle Database SQL Certified Associate Certification
3IBM Certified Database Associate
4MySQL 5.7 Database Administrator Certification
5EDB PostgreSQL 12 Associate Certification

Die nächste Tabelle ist eine Kreuzungstabelle namens certificate_enrollment

idstudent_idedition_idgradepass
121620FALSE
226850TRUE
3210900TRUE
412100FALSE
517500FALSE
617800TRUE
748800TRUE
. Sie finden das Skript hier. Die Tabelle zeigt, welche Schüler sich für welchen Schein eingeschrieben haben, zusammen mit ihren Noten und ob sie bestanden haben:

Die letzte Tabelle ist eine Kreuzungstabelle mit dem Namen certificate_edition. Sie zeigt die Liste der Zertifikatsausgaben und verweist auf die Tabelle certificate. Das Skript finden Sie hier:

idcertificate_idedition
112022
222022
332022
442022
552022
612023
722023
832023
942023
1052023

Lösung:

SELECT 
  first_name,
  last_name,
  certificate_name,
  edition,
  grade
FROM student s
FULL JOIN certificate_enrollment cen
  ON s.id = cen.student_id
FULL JOIN certificate_edition ced
  ON cen.edition_id = ced.id
FULL JOIN certificate c
  ON ced.certificate_id = c.id;

Erläuterung: Wir wählen zunächst alle relevanten Spalten aus allen vier Tabellen aus: first_name und last_name from student, certificate_name aus certificate, edition aus certificate_edition, und grade aus certificate_enrollment.

Dann verbinden wir die Tabellen wie in den vorherigen Beispielen. Zuerst ist es die student Tabelle FULL JOINed mit certificate_enrollment auf die Schüler-IDs.

Die zweite FULL JOIN fügt die certificate_edition Tabelle hinzu, um sie zu verbinden mit certificate_enrollment. Die Tabellen werden über die ID der Zertifikatsausgabe verbunden.

Nachdem wir nun drei Tabellen verbunden haben, können wir die vierte Tabelle hinzufügen. Wir verweisen auf die Tabelle certificate in FULL JOIN. Wir verknüpfen sie mit certificate_edition über die Zertifikats-ID.

Ausgabe: Die Ausgabe zeigt genau das, was wir wollen.

Es gibt eine Liste aller Schüler, die ein Zertifikat erhalten haben, dessen Ausgabe und die Note, die jeder Schüler erhalten hat. Wenn die Note unter 700 liegt, ist der Schüler durchgefallen und muss die Zertifikatsprüfung wiederholen.

Ein Schüler hat sich noch nicht für ein Zertifikatsprogramm eingeschrieben; das ist Pavel Kuba. Außerdem gibt es vier Zertifikatseditionen ohne eingeschriebene Schüler.

first_namelast_namecertificate_nameeditiongrade
MaryMaddisonMicrosoft Certified: Azure Data Fundamentals2022620
MaryMaddisonMicrosoft Certified: Azure Data Fundamentals2023850
MaryMaddisonEDB PostgreSQL 12 Associate Certification2023900
TomFrankOracle Database SQL Certified Associate Certification2022100
TomFrankOracle Database SQL Certified Associate Certification2023500
TomFrankOracle Database SQL Certified Associate Certification2023800
AmandaWilsonIBM Certified Database Associate2023800
PavelKubaNULLNULLNULL
NULLNULLEDB PostgreSQL 12 Associate Certification2022NULL
NULLNULLMySQL 5.7 Database Administrator Certification2022NULL
NULLNULLIBM Certified Database Associate2022NULL
NULLNULLMySQL 5.7 Database Administrator Certification2023NULL

Beispiel 4: Alle Autoren-Themen-Paare finden und die Artikel und ihren Status anzeigen

Aufgabe: Sie arbeiten für ein Unternehmen, das Artikelautoren für seine Kunden einstellt. Es gibt eine Liste von Autoren und Themen, die Sie anbieten. Außerdem gibt es zu jedem Thema mehrere verfügbare Artikel. Die Autoren werden diesen Artikeln zugewiesen. Ein Artikel kann einen von zwei Status haben: "Schreiben" (der Artikel wird gerade geschrieben) oder "Überarbeiten" (der Artikel wird überarbeitet).

Finden Sie alle Autoren-Themen-Paare. Listen Sie außerdem alle Artikel und ihren Status auf.

Datensatz: Dieser Datensatz besteht ebenfalls aus vier Tabellen. Die erste Tabelle ist writermit dem hier verlinkten Skript:

idfirst_namelast_name
1VictoriaThompson
2MikeMcGill
3SkyHerrera
4JimmyGoodman

Die nächste Tabelle ist topic. Hier ist das Skript:

idtopic_name
1SQL
2Python
3ML
4SQL Careers
5Python Careers

Die dritte Tabelle ist article_assignment. Sie verbindet den Autor mit dem Artikel und zeigt den aktuellen Status des Artikels an. Hier ist das Skript:

idwriter_idarticle_idstatus
143Revising
241Writing
335Writing
438Revising
5310Revising
617Writing

Die vierte Tabelle verknüpft den Artikel mit dem Thema. Sie heißt articleund das Skript befindet sich hier:

idarticle_titletopic_id
1What is FULL JOIN in SQL? An Explanation with 4 Examples1
2Pandas in Python2
3Supervised Learning3
4Basic SQL Interview Questions4
5Basic Python Interview Questions5
6SQL Fensterfunktionen1
7Ranking Data in Python2
8Unsupervised Learning3
9Intermediate SQL Interview Questions4
10Intermediate Python Interview Questions5

Lösung:

SELECT 
  first_name,
  last_name,
  topic_name,
  article_title,
  status
FROM writer w
FULL JOIN article_assignment aa
  ON w.id = aa.writer_id
FULL JOIN article a
  ON aa.article_id = a.id
FULL JOIN topic t
  ON a.topic_id = t.id;

Erläuterung: Die Abfrage ist ähnlich wie die vorherige. Sie wählt alle relevanten Spalten aus - den Namen des Autors, das Thema, den Titel des Artikels und seinen Status. Danach verbindet sie die Tabellen writer und article_assignment über die Autoren-ID mit FULL OUTER JOIN.

Eine weitere FULL JOIN fügt die dritte Tabelle article und verknüpft sie mit der Artikel-ID. Schließlich wird die vierte Tabelle mit der Themen-ID verknüpft.

Ausgabe: Hier ist eine Liste mit allen Autoren, den Themen, Artikeln und Status.

Die Themen von Jimmy Goodman sind ML und SQL. Sky Herrera schreibt über Python-Karrieren und ML. Victoria Thompson schreibt nur über Python.

Mike McGill hat keine zugewiesenen Artikel. Außerdem gibt es einen Python-, einen SQL- und zwei SQL-Karriere-Artikel, die keinem Autor zugewiesen sind.

first_namelast_nametopic_namearticle_titlestatus
JimmyGoodmanMLSupervised LearningRevising
JimmyGoodmanSQLWhat is FULL JOIN in SQL? An Explanation with 4 ExamplesWriting
SkyHerreraPython CareersBasic Python Interview QuestionsWriting
SkyHerreraMLUnsupervised LearningRevising
SkyHerreraPython CareersIntermediate Python Interview QuestionsRevising
VictoriaThompsonPythonRanking Data in PythonWriting
MikeMcGillNULLNULLNULL
NULLNULLPythonPandas in PythonNULL
NULLNULLSQLSQL FensterfunktionenNULL
NULLNULLSQL CareersBasic SQL Interview QuestionsNULL
NULLNULLSQL CareersIntermediate SQL Interview QuestionsNULL

No FULL JOIN, No SQL Mastery

FULL JOIN wird wahrscheinlich nicht so oft verwendet wie JOIN oder LEFT JOIN. Es ist ein bescheidener Join, der wartet, bis man ihn braucht, um zu glänzen. Aber ohne ihn in Ihrem Repertoire können Sie sich nicht als SQL-Meister bezeichnen.

Die obigen Beispiele haben Ihnen praktische Szenarien gezeigt, in denen Sie alle Daten aus zwei (oder mehr) Tabellen verwenden müssen. FULL JOIN macht es wirklich einfach!

Natürlich brauchen Sie noch etwas mehr Übung, denn das Wichtigste bei der Verwendung von SQL-Joins ist die Entscheidung, welcher Join verwendet werden soll. Sobald Sie das beherrschen, werden Joins einfach - die Syntax ist dieselbe, egal welchen Join-Typ Sie verwenden. Unser SQL-JOINs Kurs kann Ihnen bei der Beherrschung von JOINhelfen, da er mit praktischen Übungen gespickt ist. Dasselbe gilt für unseren Artikel über SQL-Joins mit 12 Beispielen. Wenn Sie all das gelernt haben, werden Ihnen auch die Fragen im SQL JOIN-Interview nicht mehr schwer fallen.

Jetzt liegt es an Ihnen, all diese Ressourcen zu nutzen, um FULL JOIN zu meistern!