Для SQL, когда это начинало быть желательным всегда использовать слова "Inner Join" вместо неявно joinly?

Для SQL, когда, это начинает быть желательным всегда использовать слова "Inner Join" вместо того, чтобы неявно присоединиться:

select * from t1, t2 where t1.ID = t2.ID;

? Это только для стиля или различать внешнее объединение или является там другими причинами его?

5
задан nopole 24 April 2010 в 23:02
поделиться

5 ответов

Синтаксис 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

Короче говоря, это неоднозначно, следует ли применять фильтрацию к несохраненной таблице до или после объединения.

3
ответ дан 14 December 2019 в 19:06
поделиться

Я считаю, что это стандарт ANSI. Он должен возвращать ошибку, если ключевое слово ON опущено, а (IMO) является более декларативным стилем.

0
ответ дан 14 December 2019 в 19:06
поделиться

Это стало желательным, когда это стало возможным ...

Ключевое слово join лучше описывает намерение "классического" соединения. Кроме того, когда у вас много объединений в запросе, таблица для объединения и используемое условие отображаются рядом друг с другом, вместо того, чтобы все таблицы располагались в одном месте, а все условия - в другом.

0
ответ дан 14 December 2019 в 19:06
поделиться

ANSI-92 стандартный хммм, это сложно, я рискну и угадаю 1992

0
ответ дан 14 December 2019 в 19:06
поделиться

Это стало желательным, когда был добавлен новый синтаксис для обработки несоответствий с реализациями внешнего соединения.

Поскольку объединение внешних и внутренних соединений (и определенных внешних соединений обоих направлений) со старым синтаксисом во многих случаях неоднозначно, необходимо было создать и реализовать новый синтаксис, чтобы позволить программисту на 100% понимать порядок и группировку. предложений о соединении.

Тем не менее, по-прежнему совершенно законно писать внутренние объединения в старом стиле сами по себе, но внешние объединения в старом стиле исчезают во всех формах и избавляются от них.

2
ответ дан 14 December 2019 в 19:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: