LEFT JOIN против LEFT OUTER JOIN в SQL Server
В чем разница между LEFT JOIN
и LEFT OUTER JOIN
?
Ответы
Ответ 1
В соответствии с документацией: FROM (Transact-SQL):
<join_type> ::=
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
JOIN
Ключевое слово OUTER
помечено как необязательное (заключено в квадратные скобки), и в этом случае это означает, что вы указываете его или нет, не имеет никакого значения. Обратите внимание, что, в то время как другие элементы предложения соединения также отмечены как необязательные, их исключение, конечно, может иметь значение.
Например, вся типовая часть предложения JOIN
является необязательной, и в этом случае по умолчанию используется INNER
, если вы просто укажете JOIN
. Другими словами, это законно:
SELECT *
FROM A JOIN B ON A.X = B.Y
Здесь приведен список эквивалентных синтаксисов:
A LEFT JOIN B A LEFT OUTER JOIN B
A RIGHT JOIN B A RIGHT OUTER JOIN B
A FULL JOIN B A FULL OUTER JOIN B
A INNER JOIN B A JOIN B
Также взгляните на ответ, который я оставил на этом другом вопросе SO: SQL left join vs несколько таблиц в строке FROM?.
Ответ 2
Чтобы ответить на ваш вопрос , нет никакой разницы между LEFT JOIN и LEFT OUTER JOIN, они точно такие же, что сказано...
На верхнем уровне есть в основном 3 типа объединений:
- ВНУТРЕННЯЯ
- ВНЕШНИЙ
- Перекрестная
-
INNER JOIN - извлекает данные, если они присутствуют в обеих таблицах.
-
ВНЕШНИЕ СОБЫТИЯ имеют 3 типы:
-
LEFT OUTER JOIN
- извлекает данные, если они присутствуют в левой таблице.
-
RIGHT OUTER JOIN
- извлекает данные, если они присутствуют в правой таблице.
-
FULL OUTER JOIN
- извлекает данные, если они присутствуют в любой из двух таблиц.
-
CROSS JOIN, как следует из названия, делает [n X m]
, который объединяет все ко всему.
Подобно сценарию, в котором мы просто перечисляем таблицы для соединения (в предложении FROM
оператора SELECT
), используя запятые для их разделения.
Точки, которые следует отметить:
- Если вы просто упомянете
JOIN
, то по умолчанию это INNER JOIN
.
- Соединение
OUTER
должно быть LEFT
| RIGHT
| FULL
вы не можете просто сказать OUTER JOIN
.
- Вы можете отказаться от ключевого слова
OUTER
и просто сказать LEFT JOIN
или RIGHT JOIN
или FULL JOIN
.
Для тех, кто хочет лучше их визуализировать, перейдите по этой ссылке:
Визуальное объяснение соединений SQL
Ответ 3
В чем разница между левым соединением и левым внешним соединением?
Nothing. LEFT JOIN
и LEFT OUTER JOIN
эквивалентны.
Ответ 4
Подробнее в Визуальное представление соединений SQL
Ответ 5
Я администратор PostgreSQL, насколько я понял, разница между внешним или не внешним различием объединений - это тема, которая имеет большое обсуждение по всему Интернету. До сегодняшнего дня я никогда не видел разницы между этими двумя; Поэтому я пошел дальше, и я попытался найти разницу между ними.
В конце я прочитал всю документацию об этом, и я нашел ответ для этого,
Итак, если вы посмотрите на документацию (по крайней мере, в PostgreSQL), вы можете найти эту фразу:
" Слова INNER
и OUTER
являются необязательными во всех формах. INNER
по умолчанию: LEFT
, RIGHT
и FULL
подразумевает внешнее соединение.
Другими словами,
LEFT JOIN
и LEFT OUTER JOIN
ЯВЛЯЮТСЯ ТОЛЬКО
RIGHT JOIN
и RIGHT OUTER JOIN
ЯВЛЯЮТСЯ ТАКИМ
Я надеюсь, что это может помочь тем, кто все еще пытается найти ответ.
Ответ 6
Left Join
и Left Outer Join
- это одно и то же. Первое является сокращением для последнего. То же самое можно сказать и об отношениях " Right Join
и " Right Outer Join
. Демонстрация проиллюстрирует равенство. Рабочие примеры каждого запроса были предоставлены через SQL Fiddle. Этот инструмент позволит на руки манипулировать запросом.
Дано
Левое соединение и левое внешнее соединение
Результаты
Правое соединение и правое внешнее соединение
Результаты
Ответ 7
Нечего сказать словами:
Ответ 8
Мне легче думать о Joins в следующем порядке:
- CROSS JOIN - декартово произведение обеих таблиц. Все соединения начинаются здесь.
- INNER JOIN - CROSS JOIN с добавленным фильтром.
- ВНУТРЕННЯЯ ВСТРОЕНА - ВХОДНАЯ ВХОДА с отсутствующими элементами (из таблицы LEFT или RIGHT)
добавлен позже.
Пока я не выяснил эту (относительно) простую модель, JOINS всегда были немного более черным искусством. Теперь они имеют прекрасный смысл.
Надеюсь, это поможет больше, чем это смущает.
Ответ 9
Почему LEFT/RIGHT и LEFT OUTER/RIGHT OUTER одинаковы? Объясните, почему этот словарь.
Поймите, что соединения LEFT и RIGHT являются конкретными случаями соединения OUTER и поэтому не могут быть чем-то другим, кроме OUTER LEFT/OUTER RIGHT. Соединение OUTER также называется FULL OUTER, а не LEFT и RIGHT, которые являются PARTIAL результатами соединения OUTER. Действительно:
Table A | Table B Table A | Table B Table A | Table B Table A | Table B
1 | 5 1 | 1 1 | 1 1 | 1
2 | 1 2 | 2 2 | 2 2 | 2
3 | 6 3 | null 3 | null - | -
4 | 2 4 | null 4 | null - | -
null | 5 - | - null | 5
null | 6 - | - null | 6
OUTER JOIN (FULL) LEFT OUTER (partial) RIGHT OUTER (partial)
Теперь понятно, почему эти операции имеют псевдонимы, а также ясно, что существует только 3 случая: INNER, OUTER, CROSS. С двумя под-шкафами для OUTER.
Словарь, то, как учителя объясняют это, а также некоторые ответы выше, часто делают вид, что есть много разных типов присоединения. Но на самом деле это очень просто.
Ответ 10
Ответить на ваш вопрос
В Sql Server включается синтаксис OUTER необязательно
Упоминается в статье MSDN: https://msdn.microsoft.com/en-us/library/ms177634(v=sql.130).aspx
Таким образом, следующий список показывает эквивалентные синтаксисы соединения с и без OUTER
LEFT OUTER JOIN => LEFT JOIN
RIGHT OUTER JOIN => RIGHT JOIN
FULL OUTER JOIN => FULL JOIN
Другие эквивалентные синтаксисы
INNER JOIN => JOIN
CROSS JOIN => ,
Настоятельно рекомендуем Dotnet Mob Artice: присоединяется к Sql Server
Ответ 11
В основном существует три типа JOIN
Ответ 12
Есть только 3 соединения:
Надеюсь, что это поможет.
Ответ 13
Синтаксический сахар, делает более очевидным для случайного читателя, что соединение не является внутренним.
Ответ 14
LEFT JOIN
выполняет соединение, начинающееся с первой (самой левой) таблицы, а затем любые соответствующие записи в таблице (справа).
LEFT JOIN
и LEFT OUTER JOIN
совпадают.
Согласно DoFactory
Ответ 15
Как уже упоминалось здесь, нет никакой разницы. Ключевой мир OUTER
можно удалить из словаря ключевых слов SQL, не теряя при этом выразительной силы в запросах, которые мы можем написать.
Кроме того, нам не нужны ни RIGHT
LEFT
ключевые слова, так как достаточно только одного из них. Это связано с тем, что SELECT * FROM A RIGHT JOIN B on A.ID = B.ID
в точности совпадает с SELECT * FROM B LEFT JOIN A on A.ID = B.ID
Я обнаружил, что все эти дополнительные термины сбивают с толку студентов и начинающих людей.
Ответ 16
В некоторых базах данных RIGHT/LEFT JOIN называется RIGHT/LEFT OUTER JOIN. База данных, с которой я недавно работал (MSSQL), "внешнее" слово здесь необязательно.
Ответ 17
лучше объяснения с инфо графикой.
Ответ 18
Именно в контексте этого вопроса я хочу также опубликовать 2 оператора 'APPLY':
СОЕДИНЯЕТСЯ:
-
INNER JOIN= ПРИСОЕДИНЯЙТЕСЬ
-
НАРУЖНОЕ СОЕДИНЕНИЕ
-
LEFT OUTER JOIN = ЛЕВОЕ СОЕДИНЕНИЕ
-
RIGHT OUTER JOIN = ПРАВИЛЬНОЕ СОЕДИНЕНИЕ
-
FULL OUTER JOIN = ПОЛНОЕ СОЕДИНЕНИЕ
-
CROSS JOIN
САМОСОЕДИНЕНИЕ: это не совсем отдельный тип соединения. Это в основном соединение таблицы к себе с помощью одного из приведенных выше соединений. Но я чувствовал, что стоит упомянуть в контексте обсуждений JOIN, поскольку вы услышите этот термин от многих в сообществе разработчиков SQL.
ПРИМЕНИТЬ:
- CROSS APPLY - аналогично INNER JOIN (но добавлено преимущество возможности вычислять что-то в правой таблице для каждой строки левой таблицы и возвращать только совпадающие строки)
- OUTER APPLY - аналогично LEFT OUTER JOIN (но добавил преимущество возможности вычислять что-то в правой таблице для каждой строки левой таблицы и будет возвращать все строки из левой таблицы независимо от совпадения в правой таблице)
https://www.mssqltips.com/sqlservertip/1958/sql-server-cross-apply-and-outer-apply/
https://sqlhints.com/2016/10/23/outer-apply-in-sql-server/
Пример из реальной жизни, когда использовать OUTER/CROSS APPLY в SQL
Я считаю оператор APPLY очень полезным, поскольку он дает лучшую производительность, чем выполнение тех же вычислений в подзапросе. Они также являются заменой многих аналитических функций в более старых версиях SQL Server. Вот почему я считаю, что после того, как освоиться с JOINS, один из разработчиков SQL должен попытаться изучить операторы APPLY.
Ответ 19
Ничего.
LEFT JOIN, по умолчанию используется OUTER.
Ответ 20
Я знаю, что это старый, но мне хотелось поставить мои два цента. Я понимаю, что LEFT JOIN
должен быть таким же, как LEFT OUTER JOIN
, но по моему опыту я видел, как LEFT JOIN
отбрасывает разные результаты, чем LEFT OUTER JOIN
, поэтому я начал использовать ключевое слово OUTER
более конкретным и правильным. Строки, которые должны были вернуться в LEFT JOIN
, не были такими, как если бы я использовал LEFT OUTER JOIN
. Я пытался объяснить это коллеге, когда он не смог получить нужные ему строки, поэтому я решил, что Google это различие, чтобы иметь какую-то поддержку, чтобы показать ему. Это может быть особенностью SQL Server, о которой я не уверен. Я бы сказал, что в хорошей практике было бы более целесообразно явно указать, что вы хотите, чтобы внешнее соединение имело место. Просто мое мнение.