MS-SQL Joins erklärt: Inner-, Outer-, Left-, Right- Join; Union

Mit Hilfe von Joins können Daten in SQL von einer oder mehrer Tabellen zusammengefügt werden. Joins werden in der Praxis oft mit anderen Abfragen (Queries) kombiniert: Zum Beispiel werden meist für die Auswahl von Daten nicht, wie hier verwendet, ein "select * from", sondern die jeweiligen Spalten ausgewählt: "select spalte1,spalte2 from", bzw. können die Joins natürlich mit "where" oder anderen Queries kombiniert oder verschachtelt werden,  siehe SQL Queries.  

Test-Setup Microsoft SQL Server

Zum Testen habe ich mir die kostenlose SQL Server 2019 Express Version und das SQL Management-Studio (SSMS) heruntergeladen. Zudem gibt es jetzt sogar die Möglichkeit den SQL Server auf Linux oder in einem Docker-Container zu installieren.

:


Zum Testen habe ich 2 Tabellen in der Datenbank erstellt: Personen und PLZ. Mit der in Personen enthaltenen Spalte PLZ können wir uns die zugehörige Stadt aus der Tabelle PLZ holen.
Ich habe hier absichtlich bestimmte PLZ nicht angelegt, bzw. auch PLZ verwendet die in der Tabelle Personen nicht vorkommen, damit die Auswirkung der Joins besser ersichtlich werden.

Tabelle Personen


idVornameNachnamePLZ
1Hannah
Müller
D-10115
2Mia
Huber
A-1010
3Emilia
Gruber
D-80331
4Emma
Schmidt
CH-3000
5Sophia
Weber
A-5020
6Lea
Meyer
D-22111

Tabelle PLZ

idStadtPLZ
1BerlinD-10115
2WienA-1010
3SalzburgA-5020
4SalzburgA-5026
5MünchenD-80331
6GrazA-8010

INNER JOIN

Ein Inner Join verbindet nur Spalten die in beiden Tabellen vorkommen, andere werden ausgelassen:

im SQL-Management-Studio: New Query: 

select * from Personen INNER JOIN Staedte ON Personen.PLZ = Staedte.PLZ

und diese ausführen: Execute:


Result:

Als Ergebnis bekommen wir die Daten beider Tabellen, bei denen es einen Treffer gibt, also die PLZ sich in beiden Tabellen deckt:

idVornameNachnamePLZidStadtPLZ
1 Hannah Müller D-10115 1 Berlin D-10115
2 Mia Huber A-1010  2 Wien A-1010 
5 Sophia Weber A-5020  3 Salzburg A-5020 
3 Emilia Gruber D-80331  5 München D-80331 

LEFT JOIN

Ein Left-Join verwendet die erste Tabelle und verknüpft, wenn möglich, die Daten mit der 2ten Tabelle. Sollte es in der 2ten Tabelle keinen passenden Eintrag geben, wird NULL als Wert eingetragen:

select * from Personen LEFT JOIN Staedte ON Personen.PLZ = Staedte.PLZ

Result

Als Ergebnis werden bei einem Left-Join die Daten der ersten Tabelle angezeigt und falls möglich Treffer von der 2ten Tabelle:

idVornameNachnamePLZidStadtPLZ
1 Hannah Müller D-10115 1 Berlin D-10115
2 Mia Huber A-1010  2 Wien A-1010 
3 Emilia Gruber D-80331  5 München D-80331 
4 Emma Schmidt CH-3000  NULL NULL NULL
5 Sophia Weber A-5020  3 Salzburg A-5020 
6 Lea Meyer D-22111 NULL NULL NULL

RIGHT JOIN

Ein Right-Join ist ähnlich einem Left-Join verwendet aber die 2te Tabelle als Basis und sucht nach Einträgen in der 1ten. Auch hier werden die Felder mit NULL befüllt für die es keinen Treffer gibt:

select * from Personen RIGHT JOIN Staedte ON Personen.PLZ = Staedte.PLZ

Result

Als Ergebnis werden bei einem Right-Join die Daten der zweiten Tabelle angezeigt und falls möglich Treffer von der ersten Tabelle:

idVornameNachnamePLZidStadtPLZ
1 Hannah Müller D-10115 1 Berlin D-10115
2 Mia Huber A-1010  2 Wien A-1010 
5 Sophia Weber A-5020  3 Salzburg A-5020 
NULL NULL NULL NULL 4 Salzburg A-5026
3 Emilia Gruber D-80331  5 München D-80331 
NULL NULL NULL NULL 6 Graz A-8010

FULL JOIN (FULL OUTER JOIN)

Zu guter letzt noch der "Full-Join", oft auch als "Full Outer JOIN" bezeichnet. Hier werden alle Daten von beiden Spalten zusammengefügt, sollte es keinen Treffer geben, wird dies wieder mit "NULL" befüllt

select * from Personen FULL JOIN Staedte ON Personen.PLZ = Staedte.PLZ

Result

Als Ergebnis werden bei einem Full-Join die Daten der beider Tabelle angezeigt und falls möglich Treffer von der jeweils anderen Tabelle:

idVornameNachnamePLZidStadtPLZ
1 Hannah Müller D-10115 1 Berlin D-10115
2 Mia Huber A-1010  2 Wien A-1010 
3 Emilia Gruber D-80331  5 München D-80331 
4 Emma Schmidt CH-3000  NULL NULL NULL
5 Sophia Weber A-5020  3 Salzburg A-5020 
6 Lea Meyer D-22111 NULL NULL NULL
NULL NULL NULL NULL 4 Salzburg A-5026
NULL NULL NULL NULL 6 Graz A-8010

UNION

Mit Hilfe eines UNION können 2 Tabellen zu einer zusammengefügt werden. Dazu erstelle ich eine weitere Tabelle: Personen2 und füge dort nochmal eine Person hinzu:

Tabelle Personen2

idVornameNachnamePLZ
1CordulaGrünA-5020

Query

SELECT * FROM Personen
UNION
SELECT * FROM Personen2;

Result

Das Ergebnis eines UNION sind die Daten beider Tabellen, da die Spalten identisch sind, einfach angefügt:

idVornameNachnamePLZ
1Cordula
Grün
A-5020  
1Hannah
Müller
D-10115
2Mia
Huber
A-1010  
3Emilia
Gruber
D-80331  
4Emma
Schmidt
CH-3000  
5Sophia
Weber
A-5020  
6Lea
Meyer
D-22111

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!



Kommentare


Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu. Mehr Details