Каково поведение MySQL JOIN по умолчанию, INNER или OUTER? - PullRequest
84 голосов
/ 11 декабря 2010

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

Что такое JOIN по умолчанию в MySQL?* Это то же самое, что и

SELECT * FROM t1, t2

OR

SELECT * FROM t1 INNER JOIN t2

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

Ответы [ 2 ]

114 голосов
/ 11 декабря 2010

В написании MySQL JOIN без оговорок подразумевает INNER JOIN.Другими словами, INNER в 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 из-за забытого предложения join, потому что предложения join написаны рядом с соединениями, и легко увидеть, отсутствует ли это.
0 голосов
/ 11 декабря 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...