Левое соединение против левого внешнего соединения в 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 против нескольких таблиц в строке?.

enter image description here


чтобы ответить на ваш вопрос нет никакой разницы между левым соединением и левый внешний JOIN, они точно такие же что сказал...

на верхнем уровне есть в основном 3 типа соединений:

  1. внутренний
  2. внешний
  3. крест

  1. ВНУТРЕННЕЕ СОЕДИНЕНИЕ - извлекает данные если присутствующий в обоих таблицы.

  2. ВНЕШНЕЕ СОЕДИНЕНИЕ все 3 типа:

    1. LEFT OUTER JOIN - загружает данные, если они присутствуют в левой таблице.
    2. RIGHT OUTER JOIN - загружает данные, если они присутствуют в правой таблице.
    3. FULL OUTER JOIN - извлекает данные, если они присутствуют в любой из двух таблиц.
  3. КРЕСТ ПРИСОЕДИНИТЬСЯ, как следует из названия, делает [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) вы можете найти этот фраза:

"слова INNER и OUTER не являются обязательными во всех формах. INNER по умолчанию; LEFT, RIGHT и FULL подразумевает внешнее соединение."

другими словами,

LEFT JOIN и LEFT OUTER JOIN ТЕ ЖЕ САМЫЕ

RIGHT JOIN и RIGHT OUTER JOIN ТЕ ЖЕ САМЫЕ

Я надеюсь, что это может быть вклад для тех, кто еще пытается найти ответ.


нечего сказать словами рядом с этим:enter image description here


Left Join и Left Outer Join являются одним и то же самое. Первое-это сокращение от второго. То же самое можно сказать и о Right Join и Right Outer Join отношения. Демонстрация проиллюстрирует равенство. Рабочие примеры каждого запроса были предоставлены через SQL Fiddle. Этот инструмент позволит вручную манипулировать запросом.

дано

enter image description here

Левое Соединение и Левое Внешнее Соединение

enter image description here

результаты

enter image description here


Право На Вступление и Правое Внешнее Соединение

enter image description here

результаты

enter image description here


Мне легче думать о соединениях в следующем порядке:

  • 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 случая существуют: внутренний, внешний, крест. С двумя подкадрами для внешнего. Словарь, то, как учителя объясняют это, а также некоторые ответы выше, часто делают вид, что есть много разных типов соединения. Но на самом деле все очень просто.


существует в основном три типа соединения

  1. Inner: извлекает данные, которые присутствуют в обеих таблицах
    • только присоединиться означает внутреннее соединение
  2. Outer: имеют три типа

    • левый внешний - - извлекает данные, присутствующие только в левой таблице и соответствующем состоянии
    • правый внешний - - извлекает данные, присутствующие только в правой таблице и соответствующем состоянии
    • FULL OUTER - - fetches данные присутствуют любые или оба таблица
    • (левый или правый или полный) внешнее соединение может быть написано без записи "внешний"
  3. 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 enter image description here


есть только 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 то же самое.

согласно DoFactory


как в левом соединении, так и в левом внешнем соединении, выполняющем одни и те же операции.

в основном левое соединение предоставляет все записи из таблицы 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,в которой я не уверен. Я бы сказал, что на хорошей практике было бы более целесообразно явно заявить, что вы хотите, чтобы произошло внешнее соединение. Только мое мнение.