В чем разница между 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
эквивалентны.
OUTER
это необязательно. Синтаксический сахар делает более очевидным для случайного читателя, что соединение не является внутренним.
Я - администратор PostgreSQL, насколько я понимаю, разница между внешними или не внешними соединениями - это тема, которая широко обсуждается в Интернете. До сегодняшнего дня я никогда не видел разницы между этими двумя; Поэтому я пошел дальше, и я пытаюсь найти разницу между ними. В конце я прочитал всю документацию об этом, и я нашел ответ для этого,
Так что, если вы посмотрите на документацию (по крайней мере, в PostgreSQL), вы можете найти эту фразу:
Другими словами,
LEFT JOIN
и те LEFT OUTER JOIN
же
RIGHT JOIN
и те RIGHT OUTER JOIN
же
Я надеюсь, что это может помочь тем, кто все еще пытается найти ответ.
Чтобы ответить на ваш вопрос, нет разницы между 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
CROSS JOIN
же, как FULL JOIN
? Cross Join
и Full Outer Join
... в какой - то способ , кажется , похожи. Мне кажется, что в Joins проще думать в следующем порядке:
- CROSS JOIN - декартово произведение обеих таблиц. ВСЕ объединения начинаются здесь
- INNER JOIN - CROSS JOIN с добавленным фильтром.
- ВНЕШНЕЕ СОЕДИНЕНИЕ - ВНУТРЕННЕЕ СОЕДИНЕНИЕ с отсутствующими элементами (из таблицы ВЛЕВО или ВПРАВО), добавленными впоследствии.
Пока я не понял эту (относительно) простую модель, JOINS всегда были чем-то вроде черного искусства. Теперь они имеют смысл.
Надеюсь, что это помогает больше, чем смущает.
Есть в основном три типа JOIN
- Внутренний: извлекает данные, которые присутствуют в обеих таблицах
- Only JOIN означает ВНУТРЕННЕЕ СОЕДИНЕНИЕ
Наружный: бывают трех типов
- LEFT OUTER - извлекает данные, присутствующие только в левой таблице, и соответствует условию
- RIGHT OUTER - извлекает данные, присутствующие только в правой таблице и в состоянии соответствия
- FULL OUTER - извлекает данные из любой или обеих таблиц
- (ВЛЕВО или ВПРАВО или ПОЛНО) ВНЕШНЕЕ СОЕДИНЕНИЕ можно записать без написания «ВНЕШНИЙ»
Cross Join: объединяет все со всем
Почему ВЛЕВО / ВПРАВО и ВЛЕВО НАРУЖНО / ВПРАВО наружу одинаковы? Давайте объясним, почему этот словарь. Поймите, что соединения 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
«внешний вид» внешнему соединению? Left Join
и Left Outer Join
одно и то же . Первое является сокращением для последнего. То же самое можно сказать о Right Join
и Right Outer Join
отношениях. Демонстрация проиллюстрирует равенство. Рабочие примеры каждого запроса были предоставлены через SQL Fiddle . Этот инструмент позволит на руки манипулировать запросом.
Данный
Левое соединение и левое внешнее соединение
Результаты
Правое соединение и правое внешнее соединение
Результаты
Ответить на ваш вопрос
В 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
Есть только 3 соединения:
- A) Перекрестное соединение = декартово (например, таблица A, таблица B)
- B) Внутреннее объединение = JOIN (например, таблица A Соединение / внутреннее объединение B)
В) Наружное соединение:
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
Надеюсь, это поможет.
Именно в контексте этого вопроса я хочу также опубликовать 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.
OUTER
Необязательное ключевое слово.