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

Natural join 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:

Kommentieren Kommentare