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

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

Комментарии к вопросу (3)
Решение

В соответствии с документацией: FROM (Transact-SQL):

 ::= 
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [  ] ]
    JOIN

Ключевое слово OUTER помечено как необязательное (заключено в квадратные скобки). В данном конкретном случае указание 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?.

Комментарии (24)

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

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

  1. Внутренний
  2. Внешний
  3. Крест

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

  2. Внешнее соединение от 3 типы:

  3. Левое внешнее соединение - извлекает данные, если они присутствуют в левой таблице.

  4. Правое внешнее соединение - извлекает данные, если они присутствуют в правой таблице.

  5. Полное внешнее соединение` - извлекает данные, если они присутствуют в любом из двух таблиц.

  6. Перекрестное соединение, как следует из названия, делает [н х м.] что соединяет все со всем. Похож на сценарий, где мы просто перечисляет таблицы для работы (В С пункт Выбрать заявление), используя запятые для разделения их.


Моменты, следует отметить:

  • Если вы просто упоминаете "присоединиться", то по умолчанию это внутреннее соединение.
  • В космическом соединение должно влево | вправо | полный вы не можете просто сказать внешнее.
  • Вы можете бросить внешний ключевое слово и просто сказать, левое и правое присоединиться " или " полное соединение.

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

Комментарии (5)

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

Ничего. LEFT JOIN и LEFT OUTER JOIN эквивалентны.

Комментарии (8)

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

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

"от слова внутренний и внешний являются обязательными во всех формах. "Внутренних" является значением по умолчанию; влево, вправо, и полный подразумевает внешнего соединения.&и"

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

Левое и `левое внешнее соединение-это же

`Право вступать " и " правого внешнего соединения-такие же

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

Комментарии (0)

Левое и левое внешнее соединение-это один И **же**. Первое сокращение за последние. То же самое можно сказать о взаимоотношенияхправо присоединитьсяиправое внешнее объединение`. Демонстрация будет иллюстрировать равенство. Рабочие примеры каждого запроса были предоставлены через в SQL скрипку. Этот инструмент позволит для рук на манипуляции запроса.

Дали

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

Результаты


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

Результаты

Комментарии (0)

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

  • Перекрестное соединение - декартово произведение двух таблиц. Все соединения начинаются здесь
  • Внутреннее соединение перекрестное соединение с добавлен фильтр.
  • Внешнее соединение - внутреннее соединение с недостающими элементами (с левой или правой таблице) добавлено позже.

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

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

Комментарии (1)

Почему левый/правый и левый наружный/наружный правый одинаковые? Позвольте'ы объяснить, почему этот словарь. Понимаю, что левый и правый соединяет конкретные случаи из внешнего соединения, и, следовательно, не мог'т быть ничем иным, кроме крайней левой и наружной правой. Внешнее соединение также называют полный наружный в отличие от левых и правых объединениях частично результаты внешнего соединения. Действительно:

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)

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

в SQL Server дополнит синтаксис внешний является обязательным

Он упоминается в статье MSDN : https://msdn.microsoft.com/en-us/library/ms177634(в=в SQL.130).аспн

Поэтому следующий список показывает, присоединиться эквивалентных синтаксических конструкций С и без внешний

LEFT OUTER JOIN => LEFT JOIN
RIGHT OUTER JOIN => RIGHT JOIN
FULL OUTER JOIN => FULL JOIN

Других эквивалентных синтаксических конструкций

INNER JOIN => JOIN
CROSS JOIN => ,

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

Комментарии (1)

Есть только 3 соединения:

  • А) перекрестное соединение = декартовой (например: таблица а, таблица B)
  • Б) внутреннее соединение = соединение (например: таблица соединения/внутреннее соединение таблицы Б)
  • С) внешнее соединение:

Существует три типа внешнего соединения

  1. Левое Внешнее Соединение = Левое Соединение
  2. Правое Внешнее Соединение = Право На Вступление
  3. Полное Внешнее Соединение = Полное Соединение

Надеюсь, что это'd помогите.

Комментарии (1)

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

  1. Внутренний: извлекает данные, которые присутствуют в обеих таблицах
  • Только для присоединения означает внутреннее соединение
  1. Наружный: бывают трех типов
  • Левый внешний - - считывание данных присутствует только в левой таблице & состояние соответствия
  • Правый наружный - - считывание данных присутствует только в правой таблице & состояние соответствия
  • Полный внешний - извлекает данные представить любую или обе таблицы
  • (Влево или вправо или полное) внешнего соединения могут быть написаны без записи на "внешний"и
  1. Перекрестное соединение: соединения все все
Комментарии (0)

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

Комментарии (2)

Просто в контексте данного вопроса, я хочу разместить на 2 'применить' операторы, а также:

Вступление:

  1. СОЕДИНЕНИЕ INNER = ПРИСОЕДИНЕНИЕ

  2. ВНЕШНЕЕ СОЕДИНЕНИЕ

  • ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ = ЛЕВОЕ СОЕДИНЕНИЕ

  • ПРАВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ = ПРАВО НА ВСТУПЛЕНИЕ

  • ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ = ПОЛНОЕ СОЕДИНЕНИЕ

  1. ПЕРЕКРЕСТНОЕ СОЕДИНЕНИЕ

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

Применение:

  1. Крест применить - как внутреннее соединение (но имеет дополнительное преимущество, будучи в состоянии вычислить что-то в правой таблице для каждой строки из левой таблицы и вернутся только в соответствующие строки)
  2. Наружное применение -- похожие на левое внешнее соединение (но имеет дополнительное преимущество, будучи в состоянии вычислить что-то в правой таблице для каждой строки из левой таблицы и вернет все строки из левой таблицы, независимо от совпадения на правый столик)

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

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

https://stackoverflow.com/questions/9275132/real-life-example-when-to-use-outer-cross-apply-in-sql

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

Комментарии (0)