У чому різниця між LEFT JOINі LEFT OUTER JOIN?
У чому різниця між LEFT JOINі LEFT OUTER JOIN?
Відповіді:
Відповідно до документації: FROM (Transact-SQL) :
<join_type> ::=
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
JOIN
Ключове слово OUTERпозначено як необов’язкове (укладається у квадратні дужки). У цьому конкретному випадку, вказуєте ви 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
Також подивіться на відповідь, яку я залишив на це інше питання ТА: SQL зліва приєднатися до декількох таблиць у рядку ВІД? .

INNER JOINправоруч і лише JOINзліва в списку еквівалентів?
JOINs.
Щоб відповісти на ваше запитання , немає різниці між НАЛЕГИМОЮ ПРИЄДНАЙТЕ та ЛІВНІЙ ВІДПОЛУЧАЙТЕ, вони точно такі, що сказали ...
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
CROSS JOINте саме, що FULL JOIN?
Cross Joinі Full Outer Join... певним чином здається схожим.
Яка різниця між лівим з'єднанням та лівим зовнішнім з'єднанням?
Нічого . LEFT JOINі LEFT OUTER JOINє рівнозначними.
OUTERце необов’язково.
Я DBA PostgreSQL, наскільки я міг зрозуміти різницю між різницею зовнішніх чи не зовнішніх приєднань - це тема, яка має значну дискусію по всьому Інтернету. До сьогодні я ніколи не бачив різниці між цими двома; Тож я пішов далі і намагаюся знайти різницю між тими. Наприкінці я прочитав всю документацію про це і знайшов відповідь на це,
Отже, якщо ви подивитеся на документацію (принаймні, в PostgreSQL), ви можете знайти цю фразу:
Іншими словами,
LEFT JOINі LEFT OUTER JOINСАМИ ТОЙ
RIGHT JOINі RIGHT OUTER JOINСАМИ ТОЙ
Я сподіваюся, що це може стати внеском для тих, хто все ще намагається знайти відповідь.
Left Joinі Left Outer Joinє одним і тим же . Перший є скороченням для останнього. Те ж саме можна сказати і про стосунки Right Joinта Right Outer Joinстосунки. Демонстрація проілюструє рівність. Робочі приклади кожного запиту були надані за допомогою SQL Fiddle . Цей інструмент дозволить обробляти запит.
Дано

Приєднуйтесь ліворуч і ліворуч приєднуйтесь

Результати

Правильне приєднання та право зовнішнє приєднання

Результати

Мені легше думати про Joins у такому порядку:
Поки я не з'ясував цю (відносно) просту модель, JOINS завжди була трохи більше чорним мистецтвом. Тепер вони мають ідеальний сенс.
Сподіваюся, що це допомагає більше, ніж бентежить.
Чому ЛІВО / ВПРАВО та ЛІВО ВІД / ПРАВО ВНУТРІ однакові? Пояснимо, чому ця лексика. Зрозумійте, що приєднання Ліворуч та ВПРАВО - це конкретні випадки приєднання ВНУТРІШНЬОГО, і тому не може бути нічим іншим, як ЗОВНІШНІЙ ВІД / ВІД ПРАВА. Об'єднання ВНУТРИХ також називається ПОВНИМИ ВІДКЛЮЧЕННЯМ на відміну від приєднання ЛІВО та ПРАВО, які є ЧАСТИНИМИ результатами приєднання ВИХІД. Дійсно:
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 випадки: ІННЕР, ВНУТРІШНІЙ, КРОСС. З двома підпунктами для зовнішнього. Лексика, спосіб пояснення вчителів, а також деякі відповіді вище, часто дозволяють зробити так, що існує багато різних типів приєднання. Але насправді це дуже просто.
JOINпередбачає INNER JOIN" відповідає вашим міркуванням щодо зовнішнього вокабу приєднання?
Щоб відповісти на ваше запитання
У сервер Sql приєднується синтаксис OUTER необов’язковий
Це згадується у статті msdn: https://msdn.microsoft.com/en-us/library/ms177634(v=sql.130).aspx
Отже, у наступному списку показано приєднання еквівалентних синтаксисів із та без ВІН
LEFT OUTER JOIN => LEFT JOIN
RIGHT OUTER JOIN => RIGHT JOIN
FULL OUTER JOIN => FULL JOIN
Інші еквівалентні синтаксиси
INNER JOIN => JOIN
CROSS JOIN => ,
Настійно рекомендую Dotnet Mob Artice: приєднується до сервера Sql

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 Сподіваюся, це допоможе.
В основному є три типи ПРИЄДНАЙТЕСЬ
Зовнішні: бувають трьох типів
Cross Join: приєднується до всього
Синтаксичний цукор робить більш очевидним для випадкового читача, що приєднання не є внутрішнім.
Просто в контексті цього питання я хочу також опублікувати 2 оператора "ЗАЯВА":
ПРИЄДНАЄТЬСЯ :
ВНУТРІШНЯ ПРИЄДНАЙТЕСЬ = ПРИЄДНАЙТЕ
ЗОВНІШНЕ ПРИЄДНАЙТЕСЬ
ЛЕВІШЕ ВІДПОЛУЧАЙТЕ = ЛІВНІ ПРИЄДНАЙТЕСЬ
ПРАВО ПРИЄДНУЙТЕСЬ ПРИЄДНАЙТЕСЬ = ПРАВА ПРИЄДНАЙТЕСЬ
ПОВНИЙ ПРИЄДНАЙТЕСЬ = ПОВНИЙ ПРИЄДНАЙТЕСЬ
КРОВИЙ ПРИЄДНАЙТЕ
SELF-JOIN : Це не зовсім окремий тип приєднання. Це в основному приєднання таблиці до себе, використовуючи одне з вищезазначених приєднань. Але я відчув, що варто згадати в контексті ПРИЄДНАЙТЕСЬ із обговореннями, оскільки цей термін ви почуєте від багатьох у спільноті розробників SQL.
ЗАЯВА :
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 дуже вигідним, оскільки вони дають кращу продуктивність, ніж робити ті ж обчислення в підзапиті. Вони також є заміною багатьох функцій Analytical у старих версіях SQL Server. Ось чому я вважаю, що після зручності роботи з JOINS, один розробник SQL повинен спробувати вивчити операторів APPLY далі.
OUTERНеобов'язкове ключове слово.