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;
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.
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;
Der NON EQUI JOIN hingegen nutzt die anderen Vergleichsoperatoren (>, <, >=, <=, !=) für die Bedingung.
SELECT *
FROM TabelleA
JOIN TabelleB
ON TabelleA.Spalte [>, <, >=, <=, <>] TabelleB.Spalte;
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.
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.
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.
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.