Левое соединение и левое внешнее соединение в SQL Server


в чем разница между LEFT JOIN и LEFT OUTER JOIN?

17 1277

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?.

enter image description here

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

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

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

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

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

    1. LEFT OUTER JOIN - загружает данные, если они присутствуют в левой таблице.
    2. RIGHT OUTER JOIN - загружает данные, если они присутствуют в правой таблице.
    3. FULL OUTER JOIN - извлекает данные, если они присутствуют в любой из двух таблиц.
  3. 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 эквивалентны.

я 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


Правый Join и Правое Внешнее Соединение

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: извлекает данные, которые присутствуют в обеих таблицах
    • только JOIN означает внутреннее соединение
  2. внешние: бывают трех типов

    • левый внешний - - извлекает данные, присутствующие только в левой таблице и соответствующем состоянии
    • RIGHT OUTER - - извлекает данные, присутствующие только в правой таблице и соответствующем состоянии
    • полный внешний - - извлекает данные присутствуют любой или оба таблица
    • (левый или правый или полный) внешнее соединение может быть написано без записи "внешний"
  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)
  • б) внутреннее соединение = соединение (например: таблица соединения/внутреннее соединение таблицы Б)
  • 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 потяните назад разные результаты, чем a LEFT OUTER JOIN поэтому я начал использовать ключевое слово OUTER чтобы быть более конкретным и правильным. Строки, которые должны были вернуться в LEFT JOIN не было где как когда я бы использовал LEFT OUTER JOIN это произошло. Я пытался объяснить это коллеге, когда он не смог получить строки, которые ему нужны кроме того, я решил погуглить разницу, чтобы иметь какую-то поддержку, чтобы показать ему. Это может быть специфическая вещь SQL Server, в которой я не уверен. Я бы сказал, что на хорошей практике было бы более целесообразно явно заявить, что вы хотите, чтобы произошло внешнее соединение. Только мое мнение.