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

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

Tabelle PLZ

id Stadt PLZ
1 Berlin D-10115
2 Wien A-1010
3 Salzburg A-5020
4 Salzburg A-5026
5 München D-80331
6 Graz A-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:

id Vorname Nachname PLZ id Stadt PLZ
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:

id Vorname Nachname PLZ id Stadt PLZ
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:

id Vorname Nachname PLZ id Stadt PLZ
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:

id Vorname Nachname PLZ id Stadt PLZ
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

id Vorname Nachname PLZ
1 Cordula Grün A-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:

id Vorname Nachname PLZ
1 Cordula Grün A-5020  
1 Hannah Müller D-10115
2 Mia Huber A-1010  
3 Emilia Gruber D-80331  
4 Emma Schmidt CH-3000  
5 Sophia Weber A-5020  
6 Lea 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