Kapitel 7: MySQL-Sprachreferenz 439
Wobei tabellen_verweis definiert ist als:
tabelle [[AS] alias] [USE INDEX (schluessel_liste)] [IGNORE INDEX (schluessel_liste)]
Und join_bedingung definiert ist als:
ON bedingungs_ausdruck |
USING (spalten_liste)
Sie sollten nie irgend welche Bedingungen im ON-Teil haben, die dazu benutzt werden, um
die Zeilen, die im Ergebnissatz auftauchen, zu beschr¨anken. Wenn Sie so etwas tun wollen,
m¨ussen Sie das in der WHERE-Klausel tun.
Beachten Sie, dass vor Version 3.23.17 INNER JOIN keine join_bedingung aufnahm!
Die letzte oben dargestellte LEFT OUTER JOIN-Syntax gibt es nur aus Gr¨unden der Kompat-
ibilit¨at mit ODBC:
• Einem Tabellenverweis kann mit tabelle AS alias_name oder tabelle alias_name
ein Alias zugewiesen werden:
mysql> select t1.name, t2.gehalt from angestellte AS t1, info AS t2
where t1.name = t2.name;
• Der ON-Bedingungscode ist jeglicher Bedingungscode der Form, wie er auch in einer
WHERE-Klausel benutzt werden kann.
• Wenn es f¨ur die rechte Tabelle keinen ¨ubereinstimmenden Datensatz im ON- o der USING-
Teil eines LEFT JOIN gibt, wird f¨ur die rechte Tabelle eine Zeile benutzt, in der alle
Spalten auf NULL gesetzt sind. Das k¨onnen Sie benutzen, um Datens¨atze in einer
Tabelle herauszusuchen, die in einer anderen Tabelle kein Gegenst¨uck haben:
mysql> select tabelle1.* from tabelle1
LEFT JOIN tabelle2 ON tabelle1.id=tabelle2.id
where tabelle2.id is NULL;
Dieses Beispiel findet alle Zeilen in tabelle1 mit einem id-Wert, der in tabelle2 nicht
vorhanden ist (also alle Zeilen in tabelle1 ohne entsprechende Zeile in tabelle2).
Hierbei wird nat¨urlich angenommen, dass tabelle2.id als NOT NULL deklariert ist.
Siehe Abschnitt 6.2.6 [LEFT JOIN optimisation], Seite 338.
• Die USING-(spalten_liste)-Klausel nennt eine Auflistung von Spalten, die in beiden
Tabellen existieren m¨ussen. Eine USING-Klausel wie:
A LEFT JOIN B USING (C1,C2,C3,...)
Ist definiert als semantisch identisch mit einem ON-Ausdruck wie diesem:
A.C1=B.C1 AND A.C2=B.C2 AND A.C3=B.C3,...
• Der NATURAL [LEFT] JOIN zweier Tabellen ist definiert als semantisch identisch
¨aquivalent zu einem INNER JOIN oder einem LEFT JOIN mit einer USING-Klausel, die
alle Spalten nennt, die in beiden Tabellen existieren.
• RIGHT JOIN funktioniert analog wie LEFT JOIN. Um Code zwischen Datenbanken porta-
bel zu halten, wird empfohlen, LEFT JOIN anstelle von RIGHT JOIN zu benutzen.
• STRAIGHT_JOIN ist identisch mit JOIN, ausser dass die linke Tabelle immer vor der
rechten Tabelle gelesen wird. Das kann in den (wenigen) F¨allen benutzt werden, wo
der Optimierer die Tabellen in die falsche Reihenfolge bringt.
• Ab MySQL-Version 3.23.12 k¨onnen Sie Hinweise dar¨uber geben, welchen Index MySQL
benutzen sollte, wenn Informationen aus einer Tabelle a/jointfilesconvert/293675/bgerufen werden. Das ist
Komentáře k této Příručce