Разработчики языка SQL справедливо считали, что принудительное использование приоритетов объединений слева направо было бы ненужным ограничением для языка (к сожалению, они не чувствовали то же самое при упорядочении столбцов!)
Кажется, что здесь, на Stackoverflow, есть сильное предпочтение LEFT OUTER
, в той степени, в которой люди изменят все соединение, просто чтобы иметь возможность использовать LEFT
(у нас был один здесь просто вчера).
Скажем, вы изначально написали в своем запросе Table_2 INNER JOIN Table_1
, прежде чем поняли, что вам действительно нужно внешнее соединение, сохраняющее все строки из Table_1
. Было бы намного проще просто изменить INNER
на RIGHT OUTER
, чем изменить все соединение, чтобы иметь возможность использовать LEFT OUTER
. Простой - это хорошо, потому что он менее инвазивен и, следовательно, меньше риск непреднамеренного изменения намерения запроса.
Чтобы использовать другой подобный пример, рассмотрим реляционный оператор semi join ; Будучи частью реляционной алгебры, технология не может считаться полностью завершенной без нее. Хотя стандартный SQL имеет предикат полусоединения MATCH
, он не получил широкого применения. Однако большинство продуктов SQL поддерживают различные обходные пути. Наиболее распространенный подход, используемый в Stackoverflow, заключается в использовании INNER JOIN
с DISTINCT
в предложении SELECT
и исключении атрибутов из объединенной таблицы. За этим следует использование WHERE table_1.ID IN (SELECT ID FROM Table_2)
. Следующим по популярности является WHERE EXISTS (SELECT * FROM Table_2 WHERE table_1.ID = table_1.ID)
.
Дело в том, что все вышеперечисленное - это полусоединения, которые очень часто встречаются в дикой природе. Хотя мое личное предпочтение - использовать EXISTS
(хотя, что любопытно, оно ближе к реляционному исчислению), мне все же нужно быть в состоянии идентифицировать другие как полусоединения; Интересно, что самый популярный подход (INNER JOIN
плюс DISTINCT
плюс непроекция) может быть самым трудным для идентификации!
Рефакторинг кода с единственной целью подгонки его к личному стилю справедливо осуждается: затраты на ненужные усилия, увеличение риска, использование контроля над источниками и т. Д. Обучение распознаванию и уважению других предпочтений является важным навыком: если вы обнаружите себя Реорганизовав один раз, чтобы понять это, вы поставите себя в невыгодное положение.
Конечно, с точки зрения отношений, «правильный» ответ - полностью избегать внешних объединений. В реляционной модели отсутствует такая вещь, как нуль, а внешние объединения специально предназначены для создания нулей.