Grundkurs SQL

2.8  Zusammenfassung – Die Arten des JOIN

Die JOINs haben in der SQL-Syntax einen hohen Stellenwert, denn mit diesem Befehl haben wir die Fähigkeit über mehrere Tabellen hinweg Daten abzurufen und zu manipulieren.
Gäbe es diesen Mechanismus nicht, müsste man alle Datenelemente in einer Tabelle unterbringen. Verschiedene Anwendungen müssten ohne gemeinsame Tabellen die gleichen Daten auf mehrere ähnliche Tabellen ablegen. Man hätte einen riesigen Aufwand und viele Daten redundant gespeichert!
Durch die JOIN-Anweisung lassen sich kleinere und speziellere Tabellen erstellen, die außerdem leichter zu warten sind als große Tabellen.

Mit Hilfe eines JOINs können nicht nur zwei, sondern auch sehr viel mehr Tabellen zusammengefügt werden, wie Sie in einigen Beispielen dieser Lektion gesehen haben. In der Praxis sind JOINs über 20 oder mehr Tabellen gar keine Seltenheit.

Zusammenfassend sollen hier noch einmal alle JOIN Varianten aufgezeigt werden. Es gibt noch weitere Varianten, die mit der SQL-Syntax erlaubt sind, in der Lektion aber nicht näher beschrieben wurden. Wir haben in diesem Kurs nur die gebräuchlichsten behandelt:

JOIN ohne Bedingung
(1) ... FROM tabelle_1, tabelle_2
(2) ... FROM tabelle_1 JOIN tabelle_2
(3) ... FROM tabelle_1 CROSS JOIN tabelle_2
(4) ... FROM tabelle_1 INNER JOIN tabelle_2
(5) ... FROM tabelle_1 STRAIGHT_JOIN tabelle_2
(6) ... FROM tabelle_1 NATURAL JOIN tabelle_2
    ...

(5) STRAIGHT_JOIN ist identisch mit JOIN, außer, dass die linke Tabelle immer vor der rechten Tabelle gelesen wird. In (wenigen) Fällen kann das benutzt werden, wo der Optimierer die Tabellen in die falsche Reihenfolge bringt.
Bei den anderen Varianten wird selbstständig eine optimale Reihenfolge für den Datenzugriff von MySQL gewählt. STRAIGHT_JOIN bietet sich an, wenn Sie also an den Optimierungsfähigkeiten von MySQL Zweifel haben.

(6) Der NATURAL JOIN zweier Tabellen ist identisch zu einem INNER JOIN. Der NATURAL JOIN kann verwendet werden, wenn in beiden Tabellen die zu verknüpfenden Spalten identische Bezeichnungen haben. Beispielsweise: SELECT * FROM tbl_mitarbeiter NATURAL JOIN tbl_titel

JOIN mit Bedingung
(1) ... FROM tabelle_1, tabelle_2
        WHERE tabelle_1.xyID = tabelle_2.xyID
(2) ... FROM tabelle_1 INNER JOIN tabelle_2
             ON tabelle_1.xyID = tabelle_2.xyID
(3) ... FROM tabelle_1 LEFT [OUTER] JOIN tabelle_2
             ON tabelle_1.xyID = tabelle_2.xyID
(4) ... FROM tabelle_1 RIGHT [OUTER] JOIN tabelle_2
             ON tabelle_1.xyID = tabelle_2.xyID

(Das Schlüsselwort OUTER ist optional und ändert nichts an der Funktion)
Beachten Sie bei allen OUTER JOIN's, dass die Reihenfolge der Tabellen nicht gleichgültig ist!.

Im Gegensatz zur WHERE-Anweisung, die in einer Abfrage nur einmal vorkommen darf, sind mehrere der ON-Anweisungen erlaubt. Wenn man mit der WHERE-Anweisung arbeitet, müssen die Bedingungen mit AND bzw. OR verknüpft werden. Prinzipiell kann man also auch innere und äußere JOINs mischen. Man muss allerdings damit rechnen, nicht das gewünschte Ergebnis zu erhalten.

Sie können sich folgende Regel merken:
Ein JOIN ist immer eine Verbindung der vorherigen Ergebnismenge (Tabelle oder JOIN) und der hinzugefügten Tabelle.
Um die Reihenfolge zu steuern, in welcher die JOINs erstellt werden, kann man Klammern setzen.

Den Vergleich werden wir immer über den Operator = durchführen, obwohl auch die Verwendung anderer Operatoren möglich ist. Auch muss der JOIN nicht zwangsläufig über Primär- und Fremdschlüssel erfolgen. Vielmehr können Sachverhalte beliebiger Art verbunden werden, soweit sie sich in eine Bedingung fassen lassen.