LEFT JOIN против LEFT OUTER JOIN в SQL Server

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

Ответ 1

В соответствии с документацией: FROM (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 left join vs несколько таблиц в строке FROM?.

enter image description here

Ответ 2

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

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

  • ВНУТРЕННЯЯ
  • ВНЕШНИЙ
  • Перекрестная

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

  • ВНЕШНИЕ СОБЫТИЯ имеют 3 типы:

    • LEFT OUTER JOIN - извлекает данные, если они присутствуют в левой таблице.
    • RIGHT OUTER JOIN - извлекает данные, если они присутствуют в правой таблице.
    • FULL OUTER JOIN - извлекает данные, если они присутствуют в любой из двух таблиц.
  • CROSS JOIN, как следует из названия, делает [n X m], который объединяет все ко всему.
    Подобно сценарию, в котором мы просто перечисляем таблицы для соединения (в предложении FROM оператора SELECT), используя запятые для их разделения.


Точки, которые следует отметить:

  • Если вы просто упомянете JOIN, то по умолчанию это INNER JOIN.
  • Соединение OUTER должно быть LEFT | RIGHT | FULL вы не можете просто сказать OUTER JOIN.
  • Вы можете отказаться от ключевого слова OUTER и просто сказать LEFT JOIN или RIGHT JOIN или FULL JOIN.

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

Ответ 3

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

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

Ответ 5

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

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

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

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

LEFT JOIN и LEFT OUTER JOIN ЯВЛЯЮТСЯ ТОЛЬКО

RIGHT JOIN и RIGHT OUTER JOIN ЯВЛЯЮТСЯ ТАКИМ

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

Ответ 6

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

Ответ 7

Нечего сказать словами: введите описание изображения здесь

Ответ 8

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

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

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

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

Ответ 9

Почему LEFT/RIGHT и LEFT OUTER/RIGHT OUTER одинаковы? Объясните, почему этот словарь. Поймите, что соединения 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. С двумя под-шкафами для OUTER. Словарь, то, как учителя объясняют это, а также некоторые ответы выше, часто делают вид, что есть много разных типов присоединения. Но на самом деле это очень просто.

Ответ 10

Ответить на ваш вопрос

В 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

Ответ 11

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

  • Внутренний: выборки данных, которые присутствуют в обеих таблицах
    • Только JOIN означает INNER JOIN
  • Outer: три типа

    • LEFT OUTER - - выбор данных, присутствующих только в левой таблице, и условие соответствия
    • RIGHT OUTER - - выбор данных, присутствующих только в правой таблице, и условие соответствия
    • FULL OUTER - - получение данных, представляющих любую или обе таблицы.
    • (ВЛЕВО, ВПРАВО или ПОЛНЫЙ) ВЗАИМОДЕЙСТВУЮЩИЙСЯ JOIN можно записать без записи "OUTER"
  • Cross Join: объединяет все ко всем

Ответ 12

Есть только 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    
    

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

Ответ 13

Синтаксический сахар, делает более очевидным для случайного читателя, что соединение не является внутренним.

Ответ 14

LEFT JOIN выполняет соединение, начинающееся с первой (самой левой) таблицы, а затем любые соответствующие записи в таблице (справа).

LEFT JOIN и LEFT OUTER JOIN совпадают.

Согласно DoFactory

Ответ 15

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

Ответ 16

В некоторых базах данных RIGHT/LEFT JOIN называется RIGHT/LEFT OUTER JOIN. База данных, с которой я недавно работал (MSSQL), "внешнее" слово здесь необязательно.

Ответ 17

Different Types Of SQL Joins лучше объяснения с инфо графикой.

Ответ 18

Именно в контексте этого вопроса я хочу также опубликовать 2 оператора 'APPLY':

СОЕДИНЯЕТСЯ:

  1. INNER JOIN= ПРИСОЕДИНЯЙТЕСЬ

  2. НАРУЖНОЕ СОЕДИНЕНИЕ

    • LEFT OUTER JOIN = ЛЕВОЕ СОЕДИНЕНИЕ

    • RIGHT OUTER JOIN = ПРАВИЛЬНОЕ СОЕДИНЕНИЕ

    • FULL OUTER JOIN = ПОЛНОЕ СОЕДИНЕНИЕ

  3. CROSS JOIN

САМОСОЕДИНЕНИЕ: это не совсем отдельный тип соединения. Это в основном соединение таблицы к себе с помощью одного из приведенных выше соединений. Но я чувствовал, что стоит упомянуть в контексте обсуждений JOIN, поскольку вы услышите этот термин от многих в сообществе разработчиков SQL.

ПРИМЕНИТЬ:

  1. CROSS APPLY - аналогично INNER JOIN (но добавлено преимущество возможности вычислять что-то в правой таблице для каждой строки левой таблицы и возвращать только совпадающие строки)
  2. OUTER APPLY - аналогично LEFT OUTER JOIN (но добавил преимущество возможности вычислять что-то в правой таблице для каждой строки левой таблицы и будет возвращать все строки из левой таблицы независимо от совпадения в правой таблице)

https://www.mssqltips.com/sqlservertip/1958/sql-server-cross-apply-and-outer-apply/

https://sqlhints.com/2016/10/23/outer-apply-in-sql-server/

Пример из реальной жизни, когда использовать OUTER/CROSS APPLY в SQL

Я считаю оператор APPLY очень полезным, поскольку он дает лучшую производительность, чем выполнение тех же вычислений в подзапросе. Они также являются заменой многих аналитических функций в более старых версиях SQL Server. Вот почему я считаю, что после того, как освоиться с JOINS, один из разработчиков SQL должен попытаться изучить операторы APPLY.

Ответ 19

Ничего.

LEFT JOIN, по умолчанию используется OUTER.

Ответ 20

Я знаю, что это старый, но мне хотелось поставить мои два цента. Я понимаю, что LEFT JOIN должен быть таким же, как LEFT OUTER JOIN, но по моему опыту я видел, как LEFT JOIN отбрасывает разные результаты, чем LEFT OUTER JOIN, поэтому я начал использовать ключевое слово OUTER более конкретным и правильным. Строки, которые должны были вернуться в LEFT JOIN, не были такими, как если бы я использовал LEFT OUTER JOIN. Я пытался объяснить это коллеге, когда он не смог получить нужные ему строки, поэтому я решил, что Google это различие, чтобы иметь какую-то поддержку, чтобы показать ему. Это может быть особенностью SQL Server, о которой я не уверен. Я бы сказал, что в хорошей практике было бы более целесообразно явно указать, что вы хотите, чтобы внешнее соединение имело место. Просто мое мнение.