Левое соединение против левого внешнего соединения в SQL Server
в чем разница между LEFT JOIN
и LEFT OUTER JOIN
?
17 ответов
согласно документации:FROM (Transact-SQL):
<join_type> ::=
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
JOIN
ключевое слово OUTER
помечается как необязательный (заключен в квадратные скобки), и в этом случае это означает, что независимо от того, указываете вы его или нет, не имеет значения. Обратите внимание, что в то время как другие элементы предложения join также помечены как необязательные, оставляя их out, конечно, будет иметь значение.
например, весь тип-часть 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 против нескольких таблиц в строке?.
чтобы ответить на ваш вопрос нет никакой разницы между левым соединением и левый внешний JOIN, они точно такие же что сказал...
на верхнем уровне есть в основном 3 типа соединений:
- внутренний
- внешний
- крест
ВНУТРЕННЕЕ СОЕДИНЕНИЕ - извлекает данные если присутствующий в обоих таблицы.
-
ВНЕШНЕЕ СОЕДИНЕНИЕ все 3 типа:
-
LEFT OUTER JOIN
- загружает данные, если они присутствуют в левой таблице. -
RIGHT OUTER JOIN
- загружает данные, если они присутствуют в правой таблице. -
FULL OUTER JOIN
- извлекает данные, если они присутствуют в любой из двух таблиц.
-
КРЕСТ ПРИСОЕДИНИТЬСЯ, как следует из названия, делает
[n X m]
что объединяет все всё.
Аналогично сценарию, где мы просто перечисляем таблицы Для Присоединения (вFROM
статьиSELECT
statement), используя запятые для их разделения.
пункты, котор нужно отметить:
- если вы только что упомянули
JOIN
по умолчанию этоINNER JOIN
. - An
OUTER
регистрация должна бытьLEFT
|RIGHT
|FULL
вы не можете просто сказатьOUTER JOIN
. - можно удалить
OUTER
ключевое слово и просто сказатьLEFT JOIN
илиRIGHT JOIN
илиFULL JOIN
.
для тех, кто хочет визуализировать их лучше, перейдите по этой ссылке: визуальное объяснение SQL присоединяется
в чем разница между левым соединением и левым внешним соединением?
ничего. LEFT JOIN
и LEFT OUTER JOIN
эквивалентны.
я PostgreSQL DBA, насколько я мог понять, разница между внешними или не внешними соединениями - это тема, которая имеет значительное обсуждение во всем интернете. До сегодняшнего дня я никогда не видел разницы между этими двумя; поэтому я пошел дальше и попытался найти разницу между ними. В конце я прочитал всю документацию об этом, и я нашел ответ на этот вопрос,
если вы посмотрите на документацию (по крайней мере в PostgreSQL) вы можете найти этот фраза:
другими словами,
LEFT JOIN
и LEFT OUTER JOIN
ТЕ ЖЕ САМЫЕ
RIGHT JOIN
и RIGHT OUTER JOIN
ТЕ ЖЕ САМЫЕ
Я надеюсь, что это может быть вклад для тех, кто еще пытается найти ответ.
Left Join
и Left Outer Join
являются одним и то же самое. Первое-это сокращение от второго. То же самое можно сказать и о Right Join
и Right Outer Join
отношения. Демонстрация проиллюстрирует равенство. Рабочие примеры каждого запроса были предоставлены через SQL Fiddle. Этот инструмент позволит вручную манипулировать запросом.
дано
Левое Соединение и Левое Внешнее Соединение
результаты
Право На Вступление и Правое Внешнее Соединение
результаты
Мне легче думать о соединениях в следующем порядке:
- CROSS JOIN-Декартовое произведение обеих таблиц. Все соединения начинаются здесь
- внутреннее соединение-перекрестное соединение с добавленным фильтром.
- внешнее соединение-внутреннее соединение с отсутствующими элементами (из левой или правой таблицы) добавлено позже.
пока я не понял эту (относительно) простую модель, соединения всегда были немного больше черного искусства. Теперь они совершенны. чувство.
надеюсь, это помогает больше, чем смущает.
почему левый / правый и левый внешний / правый внешний одинаковы? Давайте объясним, почему этот словарь. Поймите, что левое и правое соединения являются конкретными случаями внешнего соединения и поэтому не могут быть ничем иным, как внешним левым/внешним правым. Внешнее соединение также называется полное внешний В отличие от левого и правого соединений, которые являются частичная результаты внешнего соединения. Действительно:
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: имеют три типа
- левый внешний - - извлекает данные, присутствующие только в левой таблице и соответствующем состоянии
- правый внешний - - извлекает данные, присутствующие только в правой таблице и соответствующем состоянии
- FULL OUTER - - fetches данные присутствуют любые или оба таблица
- (левый или правый или полный) внешнее соединение может быть написано без записи "внешний"
Cross Join: соединяет все со всем
чтобы ответить на ваш вопрос
в SQL Server присоединяется синтаксис внешний необязательно
это упоминается в статье msdn:https://msdn.microsoft.com/en-us/library/ms177634 (v=sql.130).aspx
Итак, следующий список показывает, что эквивалентные синтаксисы соединяются с внешний
LEFT OUTER JOIN => LEFT JOIN
RIGT OUTER JOIN => RIGHT JOIN
FULL OUTER JOIN => FULL JOIN
другой эквивалентный синтаксис
INNER JOIN => JOIN
CROSS JOIN => ,
Настоятельно Рекомендуем Dotnet Mob Artice : присоединяется к Sql Server
есть только 3 соединения:
- A) Cross Join = декартово (например: таблица A, таблица B)
- B) Inner Join = JOIN (например: таблица A Join / Inner Join Table Б)
-
C) внешнее соединение:
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
надеюсь, это поможет.
синтаксический сахар, делает его более очевидным для стороннего читателя, что соединение не является внутренним.
LEFT JOIN
выполняет соединение, начиная с первой (самой левой) таблицы, а затем любые соответствующие вторые (самые правые) записи таблицы.
LEFT JOIN
иLEFT OUTER JOIN
то же самое.
как в левом соединении, так и в левом внешнем соединении, выполняющем одни и те же операции.
в основном левое соединение предоставляет все записи из таблицы 1 и только соответствующие записи из таблицы 2.
Он не предоставляет непревзойденные записи из таблицы 2.
как уже упоминалось здесь, нет никакой разницы. Ключевой мир 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
. Я обнаружил, что все эти дополнительные термины смущают студентов и новичков.
Я знаю,что это старый, однако хотел положить мои два цента. Я понимаю, что LEFT JOIN
должно совпадать с LEFT OUTER JOIN
но по моему опыту я видел LEFT JOIN
тянуть обратно различные результаты, чем LEFT OUTER JOIN
поэтому я начал использовать ключевое слово OUTER
чтобы быть более конкретным и правильным. Строки, которые должны были вернуться в LEFT JOIN
не где, как когда я буду использовать LEFT OUTER JOIN
так и было. Я пытался объяснить это коллеге, когда он не смог получить нужные ему строки так что я решил погуглить разницу, чтобы иметь какую-то поддержку, чтобы показать ему. Это может быть специфическая вещь SQL Server,в которой я не уверен. Я бы сказал, что на хорошей практике было бы более целесообразно явно заявить, что вы хотите, чтобы произошло внешнее соединение. Только мое мнение.