it-swarm.com.ru

Каково поведение 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.

79
Quang Van

В написании 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 из-за забытого предложения соединения, потому что предложения соединения написаны рядом с соединениями, и легко увидеть, отсутствует ли это.
104
Mark Byers

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

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

0
Mchl