В MySQL JOIN
неквалифицированное написание подразумевает INNER JOIN
. Другими словами, INNER
in не INNER JOIN
является обязательным. INNER
и CROSS
являются синонимами в MySQL. Для ясности я пишу, JOIN
есть INNER JOIN
ли у меня условие соединения и CROSS JOIN
если у меня нет условия.
Допустимый синтаксис для объединений описан в документации .
Прямо сейчас я думаю, что автономный JOIN - это не что иное, как (идентичное) использование запятых и предложений WHERE.
Эффект тот же, но история за ними другая. Синтаксис запятой взят из стандарта ANSI-89. Однако есть ряд проблем с этим синтаксисом, поэтому в стандарте ANSI-92 было введено ключевое слово JOIN.
Я настоятельно рекомендую всегда использовать синтаксис JOIN, а не запятую.
T1 JOIN T2 ON ...
читабельнее чем T1, T2 WHERE ...
.
- Он более удобен в обслуживании, потому что взаимосвязи таблиц и фильтры четко определены, а не смешаны вместе.
- Синтаксис JOIN легче преобразовать во OUTER JOIN, чем синтаксис с запятой.
- Смешивание запятой и синтаксиса JOIN в одном операторе может привести к любопытным ошибкам из-за правил приоритета.
- При использовании синтаксиса JOIN вероятность случайного создания декартова произведения меньше из-за забытого предложения соединения, потому что предложения соединения написаны рядом с соединениями, и легко увидеть, отсутствует ли оно.
SELECT * FROM t1, t2 JOIN t3 ON t1.x=t3.y WHERE t1.a = t2.b
Они эквивалентны, а также , равные
CROSS JOIN
.Между использованием запятой и
[INNER | CROSS] JOIN
синтаксисом есть некоторые различия , которые могут быть важны при объединении большего количества таблиц. Практически все, что вам нужно знать, описано здесь, в документации MySQLJOIN
.источник