Каково поведение MySQL JOIN по умолчанию, INNER или OUTER?

Итак, я просматривал интернет в последний час, читал и искал окончательный ответ на этот простой вопрос.

Что такое JOIN по умолчанию в MySQL?

SELECT * FROM t1 JOIN t2

Это то же самое, что

SELECT * FROM t1, t2

OR

SELECT * FROM t1 INNER JOIN t2

Также связанный с этим вопрос, когда вы используете предложения WHERE, это то же самое, что и JOIN или INNER JOIN?

Сейчас я думаю, что автономный JOIN идентичен использованию запятых и предложений WHERE.

Ответ 1

В MySQL-записи JOIN unqualified подразумевает 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 из-за забытого условия соединения, поскольку предложения соединения записываются рядом с объединениями, и легко видеть, отсутствует ли он.

Ответ 2

Все они эквивалентны, а также равны, CROSS JOIN.

Существуют некоторые различия между использованием синтаксиса запятой и [INNER | CROSS] JOIN, что может быть важно при объединении большего количества таблиц. Практически все, что вам нужно знать, описано здесь в документации MySQL JOIN.