Geschrieben von

SQL: Unterschied zwischen FULL JOIN und UNION ALL

Data Analytics

In meinem Beitrag “SQL: Daten verbinden” habe ich einen Überblick der verschiedenen JOIN- und UNION-Typen gegeben. Mich haben jedoch immer wieder Fragen erreicht, was denn der Unterschied zwischen dem FULL JOIN und dem UNION ALL ist, da dies im genannten Beitrag nicht ganz so klar ist. Den Unterschied möchte ich in diesem Beitrag anhand eines Beispiels erläutern.

FULL (OUTER) JOIN vs. UNION ALL

Erstellen wir zunächst einmal 2 einfache Beispiel-Tabellen:

create table example1(id int);
insert into example1 values(1);
insert into example1 values(2);
insert into example1 values(3);
insert into example1 values(4);

create table example2(id int);
insert into example2 values(3);
insert into example2 values(4);
insert into example2 values(5);
insert into example2 values(6);

Die Tabelle “example1” enthält nun folgendes:

id
1
2
3
4

Die Tabelle “example2” enthält folgendes:

id
3
4
5
6

UNION ALL

Starten wir nun mit einem UNION ALL und prüfen, was wir als Ergebnis erhalten:

select id from example1
union all
select id from example2

Das Ergebnis sieht wie folgt aus:

id
1
2
3
4
3
4
5
6

Wie wir sehen, stapelt ein UNION ALL die gewählten Spalten beider Tabellen aufeinander und inkludiert dabei auch doppelte Werte (mit UNION könnten wir Duplikate herausfiltern). Als Ergebnis erhalten wir also eine Tabelle mit einer Spalte.

FULL JOIN

Wenn wir nun ein FULL JOIN durchführen…:

select e1.id, e2.id
from example1 as e1
full join example2 as e2
on e1.id = e2.id

…dann erhalten wir folgendes Ergebnis:

idid
1NULL
2NULL
33
44
NULL5
NULL6

Wir sehen hier, dass FULL JOIN die Daten der Spalten nicht aufeinanderstapelt wie ein UNION ALL, sondern die Spalten der gewählten Tabellen nebeneinander legt. Falls ein Wert in einer Tabelle nicht vorkommt, dann werden die Werte als “NULL” ausgegeben (also nicht vorhanden).