SQL JOINs verbinden mehrere Tabellen auf Basis einer gemeinsamen Spalte miteinander.
SELECT *
FROM TabelleA
[LEFT / RIGHT / INNER / FULL OUTER / CROSS] JOIN TabelleB
ON TabelleA.Spalte = TabelleB.Spalte;
SQL Joins
Meistens modelliert man Datenbanken mit dem Star-Schema oder Snowflake-Schema, um Verbindungen zwischen Tabellen zu zeigen. Die kann man mit SQL JOINs verknüpfen. Informationen werden nämlich auf verschiedene Tabellen verteilt, damit Daten-Redundanzen vermieden werden. Es ist nicht zwangsweise notwendig, dass die Tabellen benachbart sind. Solange zwei inhaltlich identische Spalten als Verknüpfung gewählt werden können, ist ein JOIN möglich.
Es gibt zwei Kategorien von JOINs: Den EQUI JOIN und den NON EQUI JOIN.
EQUI JOIN
Der EQUI JOIN nutzt ein Gleich-Zeichen (=) als Vergleichsoperator für die Bedingung, nach der die Zeilen angefügt werden.
SELECT *
FROM TabelleA
JOIN TabelleB
ON TabelleA.Spalte = TabelleB.Spalte;
NON-EQUI JOIN
Der NON EQUI JOIN hingegen nutzt die anderen Vergleichsoperatoren (>, <, >=, <=, !=) für die Bedingung.
SELECT *
FROM TabelleA
JOIN TabelleB
ON TabelleA.Spalte [>, <, >=, <=, <>] TabelleB.Spalte;
INNER und OUTER JOINs
SQL JOIN Befehle setzen sich zusammen aus dem INNER JOIN und dem OUTER JOIN.
Der INNER JOIN gibt alle Zeilen von zwei Tabellen aus, bei denen in einer ausgewählten Spalte übereinstimmende Werte sind.
Beim OUTER JOIN werden alle Zeilen aus Tabelle A ausgegeben und alle übereinstimmenden Werte aus Tabelle B.
- Ein OUTER JOIN ist der LEFT JOIN. Dieser verbindet zwei Tabellen wie im OUTER JOIN beschrieben zusammen. Dabei wird Tabelle A als Haupttabelle benutzt, bei der alle Daten ausgegeben werden und in Tabelle B die übereinstimmenden Werte gesucht.
- Beim RIGHT JOIN verläuft das umgekehrt – Tabelle B wird als Haupttabelle genommen und aus Tabelle A werden die übereinstimmenden Werte gesucht.
- Der FULL OUTER JOIN gibt alle Spalten und Zeilen aus beiden Tabellen in einer Tabelle wieder.
CROSS JOINs
CROSS JOINs verbinden zwei Tabellen miteinander, wobei schrittweise eine Zeile aus Tabelle A mit allen Zeilen aus Tabelle B verknüpft werden. Die Anzahl der Zeilen beider Tabellen werden miteinander multipliziert und anschließend ausgegeben.
Self Joins
Eine weitere Kategorie von SQL JOINs ist der Self Join, welcher kein eigenes Keyword besitzt. Stattdessen werden die regulären JOINs wie INNER, LEFT oder RIGHT JOIN verwendet. Existieren Zusammenhänge in zwei verschiedenen Zeilen derselben Tabelle, können über einen Self Join erweiterte Zeile ausgegeben werden, die gewünschte Spalten der Bezugszeile beinhalten.
Joins vs. Subqueries
Theoretisch lassen sich die Ergebnisse aus JOINs auch über Subqueries generieren. JOINs sind allerdings in der Regel schneller als Subqueries.
Bei der Berechnung von JOINs kann das Datenbankensystem durch Berechnungen vorhersehen, welche Daten geladen werden müssen, sodass damit Zeit gespart wird.
Die Bedingungen im JOIN werden vor dem Einsetzen in eine Abfragetabelle überprüft. Bei Subqueries hingegen gibt es keine Vorberechnungen, sodass alle Werte in eine Abfragetabelle eingefügt und anschließend die Bedingungen überprüft werden.
Subqueries eignen sich allerdings für eine simplere Lesbarkeit des Codes für Anwender ohne weitreichende SQL-Kenntnisse. Bei einem kleinen Datensatz kann eine Subquery, welche zur Weiterverwendung von Anwendern ohne große SQL-Erfahrung gedacht ist, daher sinnvoller sein.