Для SQL, когда, это начинает быть желательным всегда использовать слова "Inner Join" вместо того, чтобы неявно присоединиться:
select * from t1, t2 where t1.ID = t2.ID;
? Это только для стиля или различать внешнее объединение или является там другими причинами его?
Синтаксис INNER и OUTER JOIN был формализован в спецификации SQL-92. Во многих продуктах баз данных, таких как MySQL и SQL Server, вы можете опустить слово «INNER» во внутренних соединениях и просто использовать «JOIN». Точно так же многие продукты для баз данных позволяют вам опускать слово «ВНЕШНИЙ» и просто использовать «ЛЕВОЕ СОЕДИНЕНИЕ» или «ПРАВОЕ СОЕДИНЕНИЕ» для внешних соединений. Старый синтаксис внешнего соединения * =
или = *
во многих случаях создавал двусмысленность. Многие продукты имеют или очень скоро перестанут поддерживать старый синтаксис внешнего соединения.
До спецификации SQL-92 каждый производитель использовал свой собственный синтаксис, указывающий на внешнее соединение. Т.е., * =
не был универсальным (я, кажется, помню, как кто-то использовал ? =
). Кроме того, они не реализовали универсальное внешнее соединение. Рассмотрим следующий пример:
Table1
Col1 Col2
1 Alice
2 Bob
Table2
Col1 Col2
1 1
2 2
3 3
4 4
Select
From Table1, Table2
Where Table2.Col1 *= Table1.Col1
Приведенный выше запрос обычно дает:
1 1 1 Alice
2 2 2 Bob
3 3 Null Null
4 4 Null Null
Теперь попробуйте:
Select
From Table1, Table2
Where Table2.Col1 *= Table1.Col1
And Table2.Name = 'Alice'
Для некоторых продуктов баз данных вы получите:
1 1 1 Alice
Для других вы получите:
1 1 1 Alice
2 2 Null Null
3 3 Null Null
4 4 Null Null
Короче говоря, это неоднозначно, следует ли применять фильтрацию к несохраненной таблице до или после объединения.
Я считаю, что это стандарт ANSI. Он должен возвращать ошибку, если ключевое слово ON опущено, а (IMO) является более декларативным стилем.
Это стало желательным, когда это стало возможным ...
Ключевое слово join
лучше описывает намерение "классического" соединения. Кроме того, когда у вас много объединений в запросе, таблица для объединения и используемое условие отображаются рядом друг с другом, вместо того, чтобы все таблицы располагались в одном месте, а все условия - в другом.
ANSI-92 стандартный хммм, это сложно, я рискну и угадаю 1992
Это стало желательным, когда был добавлен новый синтаксис для обработки несоответствий с реализациями внешнего соединения.
Поскольку объединение внешних и внутренних соединений (и определенных внешних соединений обоих направлений) со старым синтаксисом во многих случаях неоднозначно, необходимо было создать и реализовать новый синтаксис, чтобы позволить программисту на 100% понимать порядок и группировку. предложений о соединении.
Тем не менее, по-прежнему совершенно законно писать внутренние объединения в старом стиле сами по себе, но внешние объединения в старом стиле исчезают во всех формах и избавляются от них.