In MySQL bedeutet JOINunqualifiziertes Schreiben INNER JOIN. Mit anderen Worten ist das INNERIn INNER JOINoptional. INNERund CROSSsind Synonyme in MySQL. Aus Gründen der Klarheit schreibe ich JOINoder INNER JOINwenn ich eine Join-Bedingung habe undCROSS JOIN wenn ich keine Bedingung habe.
Im Moment denke ich, dass ein eigenständiger JOIN nichts anderes ist als (identisch mit) die Verwendung von Kommas und WHERE-Klauseln.
Der Effekt ist der gleiche, aber die Geschichte dahinter ist anders. Die Kommasyntax entspricht dem ANSI-89-Standard. Es gibt jedoch eine Reihe von Problemen mit dieser Syntax, sodass im ANSI-92-Standard das Schlüsselwort JOIN eingeführt wurde.
Ich würde dringend empfehlen, immer die JOIN-Syntax anstelle des Kommas zu verwenden.
T1 JOIN T2 ON ... ist besser lesbar als T1, T2 WHERE ... .
Es ist wartbarer, da die Tabellenbeziehungen und Filter klar definiert und nicht miteinander vermischt sind.
Die JOIN-Syntax lässt sich leichter in OUTER JOIN konvertieren als die Kommasyntax.
Das Mischen der Komma- und JOIN-Syntax in derselben Anweisung kann aufgrund der Vorrangregeln zu merkwürdigen Fehlern führen.
Es ist weniger wahrscheinlich, dass bei Verwendung der JOIN-Syntax aufgrund einer vergessenen Join-Klausel versehentlich ein kartesisches Produkt erstellt wird, da die Join-Klauseln neben den Joins stehen und leicht zu erkennen ist, ob eine fehlt.
Süß, danke, dass du diese einfache Frage für mich geklärt hast :) In der Vergangenheit habe ich immer Kommas + where-Klauseln verwendet ... werde aber gemäß deinem Rat auf die Verwendung von JOINs umstellen. Vielen Dank
Quang Van
Hey Mark, was meinst du mit einer Mischung aus JOIN und Komma? Mischen Sie Abfragen wie diese, SELECT * FROM t1 LEFT JOIN (t2, t3, t4) ON (t2.a = t1.a UND t3.b = t1.b UND t4.c = t1.c)?
Quang Van
2
@Quang: Dies wird zum Beispiel fehlschlagen:SELECT * FROM t1, t2 JOIN t3 ON t1.x=t3.y WHERE t1.a = t2.b
Mark Byers
0
Diese sind alle gleichwertig und auch gleich CROSS JOIN .
Es gibt einige Unterschiede zwischen der Verwendung von Komma und [INNER | CROSS] JOINSyntax, die beim Verknüpfen mehrerer Tabellen wichtig sein können. So ziemlich alles, was Sie wissen müssen, ist hier in der MySQL- JOINDokumentation beschrieben .
SELECT * FROM t1, t2 JOIN t3 ON t1.x=t3.y WHERE t1.a = t2.b
Diese sind alle gleichwertig und auch gleich
CROSS JOIN
.Es gibt einige Unterschiede zwischen der Verwendung von Komma und
[INNER | CROSS] JOIN
Syntax, die beim Verknüpfen mehrerer Tabellen wichtig sein können. So ziemlich alles, was Sie wissen müssen, ist hier in der MySQL-JOIN
Dokumentation beschrieben .quelle