Левое соединение и левое внешнее соединение в SQL Server
в чем разница между LEFT JOIN
и LEFT OUTER JOIN
?
17 ответов:
согласно документации:FROM (Transact-SQL):
<join_type> ::= [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ] JOIN
ключевое слово
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 left join vs multiple tables on FROM line?.
чтобы ответить на ваш вопрос нет никакой разницы между левым соединением и левое внешнее соединение, они точно такие же что сказал...
на верхнем уровне есть в основном 3 типа соединений:
- внутренний
- внешний
- крест
ВНУТРЕННЕЕ СОЕДИНЕНИЕ - загружает данные, если они присутствуют в обоих таблицы.
ВНЕШНЕЕ СОЕДИНЕНИЕ все 3 типа:
LEFT OUTER JOIN
- загружает данные, если они присутствуют в левой таблице.RIGHT OUTER JOIN
- загружает данные, если они присутствуют в правой таблице.FULL OUTER JOIN
- извлекает данные, если они присутствуют в любой из двух таблиц.CROSS JOIN, как следует из названия, делает
[n X m]
что объединяет все всё.
Подобно сценарию, где мы просто перечисляем таблицы Для Присоединения (вFROM
статьиSELECT
заявление), используя запятые, чтобы разделить их.
пункты, котор нужно отметить:
- если вы просто упоминаете
JOIN
по умолчанию этоINNER JOIN
.- An
OUTER
join должен бытьLEFT
/RIGHT
/FULL
вы не можете просто сказатьOUTER JOIN
.- можно удалить
OUTER
ключевое слово и просто сказатьLEFT JOIN
илиRIGHT JOIN
илиFULL JOIN
.
для тех, кто хочет визуализировать их в лучшую сторону, пожалуйста, перейдите по этой ссылке: визуальное объяснение SQL присоединяется
в чем разница между левым соединением и левым внешним соединением?
ничего.
LEFT JOIN
иLEFT OUTER JOIN
эквивалентны.
подробнее на визуальное представление SQL-соединений
я 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. Этот инструмент позволит руки на манипуляции запроса.дано
Левое Соединение и Левое Внешнее Соединение
результаты
Правый Join и Правое Внешнее Соединение
результаты
Мне легче думать о соединениях в следующем порядке:
- 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: извлекает данные, которые присутствуют в обеих таблицах
- только JOIN означает внутреннее соединение
внешние: бывают трех типов
- левый внешний - - извлекает данные, присутствующие только в левой таблице и соответствующем состоянии
- RIGHT OUTER - - извлекает данные, присутствующие только в правой таблице и соответствующем состоянии
- полный внешний - - извлекает данные присутствуют любой или оба таблица
- (левый или правый или полный) внешнее соединение может быть написано без записи "внешний"
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)
- б) внутреннее соединение = соединение (например: таблица соединения/внутреннее соединение таблицы Б)
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
потяните назад разные результаты, чем aLEFT OUTER JOIN
поэтому я начал использовать ключевое словоOUTER
чтобы быть более конкретным и правильным. Строки, которые должны были вернуться вLEFT JOIN
не было где как когда я бы использовалLEFT OUTER JOIN
это произошло. Я пытался объяснить это коллеге, когда он не смог получить строки, которые ему нужны кроме того, я решил погуглить разницу, чтобы иметь какую-то поддержку, чтобы показать ему. Это может быть специфическая вещь SQL Server, в которой я не уверен. Я бы сказал, что на хорошей практике было бы более целесообразно явно заявить, что вы хотите, чтобы произошло внешнее соединение. Только мое мнение.