Wenn es zwischen zwei Tabellen eine Beziehung gibt, will man die Tabellen oft verknüpfen.
Das kartesische Produkt
Die einfachste Verknüpfung ist das kartesische Produkt, das jeden Eintrag der einen Tabelle mit jedem Eintrag der anderen Tabelle verknüpft. In SQL geht das so:
SELECT *
FROM Tabelle1, Tabelle2
Dies liefert das kartesische Produkt von Tabelle1
und Tabelle2
. Dies ist jedoch nicht erwünscht, wenn die Tabellen in einer Beziehung stehen.
Der natürliche Join
Man nehme an, dass Tabelle1
den Primärschlüssel primary
und Tabelle2
den Fremdschlüssel foreign
hat.
Der natürliche Join mit WHERE
Venn-Diagramm des natürlichen Joins
Man kann die Tabellen so verknüpfen, dass Primärschlüssel und Fremdschlüssel zusammenfallen, nämlich mit dem SQL-Befehl WHERE
:
SELECT *
FROM Tabelle1, Tabelle2
WHERE Tabelle1.`primary` = Tabelle2.`foreign`
Diese Operation nennt man einen Join, da die Tabellen auf sinnvolle Weise miteinander verbunden werden. SQL bietet jedoch bessere Befehle für diesen Zweck:
Der natürliche Join mit JOIN
SELECT *
FROM Tabelle1 JOIN Tabelle2
ON Tabelle1.`primary` = Tabelle2.`foreign`
Dies liefert zwar das gleiche Ergebnis wie der Join mit WHERE
. Aber aus der Schreibweise ist leichter ersichtlich, dass es sich um einen natürlichen Join handelt, und nicht um ein kartesisches Produkt.
Mehrere natürliche Joins
Es lassen sich beliebig viele Tabellen mit einem Join verbinden. Das geht so:
SELECT *
FROM Tabelle1
JOIN Tabelle2 ON Tabelle1.`primary` = Tabelle2.`foreign`
JOIN Tabelle3 ON Tabelle2.`primary` = Tabelle3.`foreign`
JOIN Tabelle4 ON Tabelle3.`primary` = Tabelle4.`foreign`
Hier wurde erst Tabelle1
mit Tabelle2
verbunden. Das Resultat wurde dann mit Tabelle3
verbunden. Das Resultat wurde wiederum mit Tabelle4
verbunden.
Die eigentliche Reihenfolge spielt keine Rolle. Es wäre auch möglich, zuerst Tabelle2
mit Tabelle3
zu joinen, und das Resultat erst mit Tabelle1
und dann mit Tabelle4
zu joinen.
Datenbanken können die Join-Reihenfolge, die vom Benutzer vorgesehen ist, abändern. Denn oft ist eine Join-Reihenfolge schneller als andere, und Datenbanken wollen immer das Ergebnis so schnell wie irgend möglich berechnen. Als Benutzer braucht man sich darüber aber keine Gedanken machen, solche Überlegungen kann man der Datenbank überlassen.
Andere Join-Arten
Abgesehen vom natürlichen Join gibt es z.B. den äußeren Join, den linken äußeren Join, den rechten äußeren Join und viele mehr. Hier sind ein paar weiterführende Links über Joins:
- Deutsch: Einführung in Joins - SelfHTML Wiki
- Englisch: SQL joins explained
- Englisch: Joins (SQL) - Wikipedia