Besteht zwischen zwei Tabellen eine Beziehung, möchte man die Tabellen gerne verknüpfen. In diesem Artikel lernst du, wie das funktioniert.
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
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, Tabelle2WHERE 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 Tabelle2ON 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
Du hast noch nicht genug vom Thema?
Hier findest du noch weitere passende Inhalte zum Thema: