2.8 Zusammenfassung – Die Arten des JOIN
Die JOIN
s 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 JOIN
s 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 JOIN
s ü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 JOIN
s 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 JOIN
s 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.