LEFT JOIN против LEFT OUTER JOIN в SQL Server - PullRequest
1432 голосов
/ 02 января 2009

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

Ответы [ 11 ]

2061 голосов
/ 02 января 2009

Согласно документации: ОТ (Transact-SQL) :

<join_type> ::= 
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
    JOIN

Ключевое слово OUTER помечается как необязательное (заключено в квадратные скобки), и в данном случае это означает, что независимо от того, указываете вы его или нет, не имеет значения. Обратите внимание, что, хотя другие элементы предложения объединения также помечены как необязательные, исключение их , конечно, будет иметь значение.

Например, вся типовая часть предложения 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 против нескольких таблиц в строке FROM? .

enter image description here

670 голосов
/ 09 декабря 2010

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

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

  1. ВНУТРЕННИЙ
  2. OUTER
  3. CROSS

  1. INNER JOIN - извлекает данные, если они присутствуют в обеих таблицах.

  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.
  • Соединение OUTER должно быть LEFT | RIGHT | FULL Вы не можете просто сказать OUTER JOIN.
  • Вы можете оставить ключевое слово OUTER и просто сказать LEFT JOIN или RIGHT JOIN или FULL JOIN.

Для тех, кто хочет визуализировать их лучше, перейдите по этой ссылке: Визуальное объяснение соединений SQL

329 голосов
/ 02 января 2009

В чем разница между левым соединением и левым внешним соединением?

Nothing . LEFT JOIN и LEFT OUTER JOIN эквивалентны.

62 голосов
/ 30 августа 2010

Я - администратор PostgreSQL, насколько я понимаю, разница между внешними или не внешними соединениями - это тема, которая широко обсуждается в Интернете. До сегодняшнего дня я никогда не видел разницы между этими двумя; Поэтому я пошел дальше, и я пытаюсь найти разницу между ними. В конце я прочитал всю документацию об этом и нашел ответ на этот вопрос,

Так что, если вы посмотрите на документацию (по крайней мере, в PostgreSQL), вы можете найти эту фразу:

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

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

LEFT JOIN и LEFT OUTER JOIN одинаковы

RIGHT JOIN и RIGHT OUTER JOIN одинаковы

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

55 голосов
/ 22 мая 2015

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

1012 * С учетом *

enter image description here

левое соединение и левое внешнее соединение

enter image description here

Результаты

enter image description here


правое соединение и правое внешнее соединение

enter image description here

Результаты

enter image description here

38 голосов
/ 30 декабря 2011

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

  • CROSS JOIN - декартово произведение обеих таблиц. ВСЕ объединения начинаются здесь
  • INNER JOIN - CROSS JOIN с добавленным фильтром.
  • OUTER JOIN - ВНУТРЕННЕЕ СОЕДИНЕНИЕ с пропущенными элементами (из таблицы ВЛЕВО или ВПРАВО) добавлено позже.

Пока я не разобрался с этой (относительно) простой моделью, JOINS всегда были чем-то вроде черного искусства. Теперь они имеют смысл.

Надеюсь, это поможет больше, чем запутает.

28 голосов
/ 18 апреля 2014

Почему ВЛЕВО / ВПРАВО и ВЛЕВО НАРУЖНО / ВПРАВО наружу одинаковы? Давайте объясним, почему этот словарь. Поймите, что соединения LEFT и RIGHT являются особыми случаями соединения OUTER, и поэтому не могут быть ничем иным, как OUTER LEFT / OUTER RIGHT. Соединение OUTER также называется FULL OUTER в отличие от соединений LEFT и RIGHT, которые являются PARTIAL результатами соединения 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. С двумя кейсами для ВНЕШНЕГО. Словарный запас, то, как учителя объясняют это, а также некоторые ответы выше, часто создают впечатление, что существует множество различных типов объединения. Но на самом деле все очень просто.

21 голосов
/ 25 июня 2016

Чтобы ответить на ваш вопрос

В 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 enter image description here

18 голосов
/ 17 марта 2017

Всего 3 соединения:

  • A) Перекрестное соединение = декартово (например, таблица A, таблица B)
  • B) Внутреннее объединение = 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    
    

Надеюсь, это поможет.

18 голосов
/ 18 января 2012

Существует в основном три типа JOIN

  1. Inner: извлекает данные, которые присутствуют в обеих таблицах
    • Только СОЕДИНИТЬ означает ВНУТРЕННЕЕ СОЕДИНЕНИЕ
  2. Наружный: бывают трех типов

    • LEFT OUTER - - извлекает данные, присутствующие только в левой таблице, и соответствует условию
    • RIGHT OUTER - - извлекает данные, присутствующие только в правой таблице, и соответствует условию
    • FULL OUTER - - извлекает данные из любой или обеих таблиц
    • (ВЛЕВО, ВПРАВО или ПОЛНО) ВНЕШНЕЕ СОЕДИНЕНИЕ можно записать без записи «ВНЕШНИЙ»
  3. Cross Join: объединяет все во все

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...