В чем разница между LEFT JOIN
и LEFT OUTER JOIN
?
В чем разница между LEFT JOIN
и LEFT OUTER JOIN
?
Ответы:
Согласно документации: ОТ (Transact-SQL) :
<join_type> ::=
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
JOIN
Ключевое слово OUTER
помечается как необязательное (заключено в квадратные скобки). В этом конкретном случае, независимо от того, указали вы это OUTER
или нет, не имеет значения. Обратите внимание, что, хотя другие элементы предложения join также помечены как необязательные, их исключение будет иметь значение.
Например, вся типовая часть 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 оставил соединение против нескольких таблиц в строке ОТ? ,
INNER JOIN
справа и JOIN
слева в списке эквивалентов?
JOIN
s.
Чтобы ответить на ваш вопрос, нет разницы между LEFT JOIN и LEFT OUTER JOIN, они точно такие же , как сказали ...
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
CROSS JOIN
же, как FULL JOIN
?
Cross Join
и Full Outer Join
... в некотором роде кажется похожим.
В чем разница между левым соединением и левым внешним соединением?
Ничего . LEFT JOIN
и LEFT OUTER JOIN
эквивалентны.
OUTER
это необязательно.
Я - администратор PostgreSQL, насколько я понимаю, разница между внешними или не внешними соединениями - это тема, которая широко обсуждается в Интернете. До сегодняшнего дня я никогда не видел разницы между этими двумя; Поэтому я пошел дальше, и я пытаюсь найти разницу между ними. В конце я прочитал всю документацию об этом, и я нашел ответ для этого,
Так что, если вы посмотрите на документацию (по крайней мере, в PostgreSQL), вы можете найти эту фразу:
Другими словами,
LEFT JOIN
и те LEFT OUTER JOIN
же
RIGHT JOIN
и те RIGHT OUTER JOIN
же
Я надеюсь, что это может помочь тем, кто все еще пытается найти ответ.
Left Join
и Left Outer Join
одно и то же . Первое является сокращением для последнего. То же самое можно сказать о Right Join
и Right Outer Join
отношениях. Демонстрация проиллюстрирует равенство. Рабочие примеры каждого запроса были предоставлены через SQL Fiddle . Этот инструмент позволит на руки манипулировать запросом.
Данный
Левое соединение и левое внешнее соединение
Результаты
Правое соединение и правое внешнее соединение
Результаты
Мне кажется, что в Joins проще думать в следующем порядке:
Пока я не разобрался в этой (относительно) простой модели, JOINS всегда были чем-то вроде черного искусства. Теперь они имеют смысл.
Надеюсь, это поможет больше, чем смущает.
Почему ВЛЕВО / ВПРАВО и ВЛЕВО НАРУЖНО / ВПРАВО наружу одинаковы? Давайте объясним, почему этот словарь. Поймите, что соединения LEFT и RIGHT являются особыми случаями соединения OUTER, и поэтому не могут быть ничем иным, как OUTER LEFT / OUTER RIGHT. Соединение OUTER также называется FULL OUTER, в отличие от соединений LEFT и RIGHT, которые являются ЧАСТИЧНЫМИ результатами соединения 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. С двумя кейсами для ВНЕШНЕГО. Словарный запас, то, как учителя объясняют это, а также некоторые ответы выше, часто создают впечатление, что существует множество различных типов объединения. Но на самом деле все очень просто.
JOIN
словосочетанию INNER JOIN
«внешний вид соединения» внешнему соединению?
Ответить на ваш вопрос
В 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
В) Наружное соединение:
There are three type of outer join
1) Left Outer Join = Left Join
2) Right Outer Join = Right Join
3) Full Outer Join = Full Join
Надеюсь, это поможет.
Есть в основном три типа JOIN
Наружный: бывают трех типов
Cross Join: объединяет все со всем
Синтаксический сахар делает для обычного читателя более очевидным, что соединение не является внутренним.
Именно в контексте этого вопроса я хочу также опубликовать 2 оператора 'APPLY':
СОЕДИНЯЕТСЯ :
INNER JOIN = ПРИСОЕДИНИТЬСЯ
НАРУЖНОЕ СОЕДИНЕНИЕ
LEFT OUTER JOIN = ЛЕВОЕ СОЕДИНЕНИЕ
RIGHT OUTER JOIN = ПРАВИЛЬНОЕ СОЕДИНЕНИЕ
FULL OUTER JOIN = ПОЛНОЕ СОЕДИНЕНИЕ
CROSS JOIN
САМОСОЕДИНЕНИЕ : Это не совсем отдельный тип соединения. Это в основном соединение таблицы с самим собой с помощью одного из вышеуказанных соединений. Но я чувствовал, что стоит упомянуть в контексте обсуждения JOIN, поскольку вы услышите этот термин от многих в сообществе разработчиков SQL.
ПРИМЕНИТЬ :
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.
OUTER
Необязательное ключевое слово.