"3.95.131.208 - 3.95.131.208"

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

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

+1433
источник поделиться
20 ответов

В соответствии с документацией: 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

+2064
источник

Чтобы ответить на ваш вопрос , нет никакой разницы между 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

+670
источник

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

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

+329
источник

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

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

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

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

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

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

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

+62
источник

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

+55
источник

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

+54
источник

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

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

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

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

+38
источник

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

+28
источник

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

В 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

+21
источник

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

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

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

+18
источник

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

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

+18
источник

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

+14
источник

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

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

Согласно DoFactory

0
источник

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

0
источник

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

0
источник

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

0
источник

Именно в контексте этого вопроса я хочу также опубликовать 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.

0
источник

Ничего.

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

-1
источник

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

-8
источник

Посмотрите другие вопросы по меткам или Задайте вопрос