Яка поведінка MySQL JOIN за замовчуванням, INNER або OUTER?


92

Тож останню годину я переглядав Інтернет, читав і шукав остаточну відповідь на це просте запитання.

Яким є JOIN за замовчуванням у MySQL?

SELECT * FROM t1 JOIN t2

Це те саме, що

SELECT * FROM t1, t2

OR

SELECT * FROM t1 INNER JOIN t2

Також пов'язане питання, коли ви використовуєте речення "ДЕ", це те саме, що JOIN чи INNER JOIN?

Зараз я думаю, що автономний JOIN ідентичний використанню коми та речень WHERE.

Відповіді:


125

У MySQL написання JOINнекваліфікованого означає INNER JOIN. Іншими словами, INNERin не 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 пишуться поруч із об’єднаннями, і легко зрозуміти, чи немає такого.

Солодкий, дякую за роз'яснення цього простого запитання для мене :) Раніше я завжди використовував коми + де речення ... але буду переходити до використання JOIN за вашою порадою. Дякую
Куанг Ван

Гей, Марк, що ти маєш на увазі під поєднаннями JOIN та комами. Змішайте такі запити, ВИБЕРІТЬ * ВІД t1 ЛІВО ПРИЄДНАЙТЕСЯ (t2, t3, t4) УВІМКНУТИ (t2.a = t1.a І t3.b = t1.b І t4.c = t1.c)?
Куанг Ван

2
@Quang: Це, наприклад, не вдасться:SELECT * FROM t1, t2 JOIN t3 ON t1.x=t3.y WHERE t1.a = t2.b
Mark Byers

0

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

Існують деякі відмінності між використанням коми та [INNER | CROSS] JOINсинтаксису, що може бути важливим при об’єднанні більшої кількості таблиць. Майже все, що вам потрібно знати, описано тут у документації MySQLJOIN .


1
^ --- відповідь на запитання JOIN (автономний) - це в основному те саме, що до INNER та коми + де речення
Quang Van
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.