У чому різниця між 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
зліва в списку еквівалентів?
JOIN
s.
Щоб відповісти на ваше запитання , немає різниці між НАЛЕГИМОЮ ПРИЄДНАЙТЕ та ЛІВНІЙ ВІДПОЛУЧАЙТЕ, вони точно такі, що сказали ...
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
Необов'язкове ключове слово.