JOIN у SQL Server: типи з прикладами

⚡ Розумний підсумок

Операції JOIN у SQL Server об'єднують рядки з двох або більше таблиць на основі пов'язаного стовпця, використовуючи операції INNER, LEFT OUTER, RIGHT OUTER та FULL OUTER, щоб контролювати, які збігаючі та незбігаючі рядки відображатимуться в результаті.

  • 🔗 Мета: Операція JOIN отримує пов'язані дані з двох або більше таблиць шляхом зіставлення зі спільним стовпцем, зазвичай ключем.
  • 🎯 ВНУТРІШНЄ З'ЄДНАННЯ: INNER JOIN повертає лише ті рядки, для яких умова об'єднання є істинною в обох таблицях.
  • ⬅️ ЛІВЕ ЗОВНІШНЄ З'ЄДНАННЯ: ЛІВЕ ЗОВНІШНЄ З'ЄДНАННЯ повертає кожен рядок з лівої таблиці, заповнюючи незбігані стовпці правої таблиці значенням NULL.
  • ➡️ ПРАВИЙ ЗОВНІШНІЙ З'ЄДНАННЯ: RIGHT OUTER JOIN повертає кожен рядок з правої таблиці, заповнюючи незбігані стовпці лівої таблиці значенням NULL.
  • 🔄 ПОВНЕ ЗОВНІШНЄ ПРИЄДНАННЯ: ПОВНЕ ЗОВНІШНЄ ОБ'ЄДНАННЯ повертає всі рядки з обох таблиць, використовуючи NULL скрізь, де умова не виконується.
  • 🔑 Умови увімкнення: Речення ON іменує стовпці, що зв'язують таблиці, найчастіше це пара первинного ключа та зовнішнього ключа.

ОБ'ЄДНАННЯ в SQL Server: приклади ВНУТРІШНЬОГО, ЛІВОГО, ПРАВОГО та ПОВНОГО ЗОВНІШНЬОГО ОБ'ЄДНАННЯ

Що таке об'єднання (Joins) у SQL Server?

Дані можна отримати з кількох таблиць за допомогою оператора JOIN. SQL ServerОперація JOIN об'єднує рядки з двох або більше таблиць на основі пов'язаного стовпця між ними, найчастіше primary key зіставлено з зовнішній ключУ SQL Server існує чотири основні типи операцій JOIN:

  • ВНУТРІШНЄ ОБ'ЄДНАННЯ / просте об'єднання
  • ЛІВЕ ЗОВНІШНЄ З'ЄДНАННЯ / ЛІВЕ З'ЄДНАННЯ
  • ПРАВИЙ ЗОВНІШНІЙ З'ЄДНАННЯ / ПРАВИЙ З'ЄДНАННЯ
  • ПОВНЕ ПРИЄДНАННЯ

У таблиці нижче підсумовано, які рядки повертає кожен тип JOIN:

Тип JOIN Повернені рядки
INNER JOIN Тільки рядки, де умова об'єднання збігається в обох таблицях.
ЗАЛИШИЛИ ЗОВНІШНЕ ПРИЄДНАННЯ Усі рядки з лівої таблиці, а також відповідні рядки правої таблиці (NULL-значення, якщо немає збігів).
ПРАВЕ ЗОВНІШНЄ З'ЄДНАННЯ Усі рядки з правої таблиці, а також відповідні рядки з лівої таблиці (NULL-значення, якщо немає збігів).
ПОВНЕ ПРИЄДНАННЯ Усі рядки з обох таблиць, з NULL-значеннями там, де умова не виконується.

У наведених нижче прикладах використовуються два Таблиці, Студенти та Плата, об'єднані у спільній колонці вступу. У кожному розділі пояснюється один тип JOIN з його синтаксисом, обробленим запитом та результатом.

INNER JOIN

Цей тип SQL Server Функція JOIN повертає рядки з усіх таблиць, у яких умова об'єднання є істинною. Синтаксис функції такий:

SELECT columns
FROM table_1 
INNER JOIN table_2
ON table_1.column = table_2.column;

Для демонстрації цього ми використаємо дві наступні таблиці. У таблиці «Студенти» нижче перелічено кожного студента та його номер зарахування:

Таблиця студентів зі стовпцями "допуск", "ім'я" та "прізвище"

У таблиці оплати нижче зазначено суму, сплачену кожним номером приймальної комісії:

Таблиця оплати з номерами вступників та стовпцем amount_paid

Наступна команда демонструє INNER JOIN у SQL Server на прикладі:

SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid
FROM Students
INNER JOIN Fee
ON Students.admission = Fee.admission

Команда повертає наступний результат, який показує лише номери зарахування, присутні в обох таблицях:

Результат INNER JOIN, що показує лише студентів, чиї вступні дані відображаються в обох таблицях

Ми можемо визначити, які студенти сплатили внесок. Ми використовували стовпець зі спільними значеннями в обох таблицях, тобто стовпець вступу.

ЗАЛИШИЛИ ЗОВНІШНЕ ПРИЄДНАННЯ

Цей тип об'єднання повертає всі рядки з лівої таблиці, а також записи з правої таблиці з відповідними значеннями. Наприклад:

SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid
FROM Students
LEFT OUTER JOIN Fee
ON Students.admission = Fee.admission

Код повертає наступний результат: keeping кожен студент, навіть якщо записи про оплату не збігаються:

Результат лівого зовнішнього з'єднання зберігаєтьсяping кожен студент має NULL за неперевершену плату

Записи без відповідних значень замінюються значеннями NULL у відповідних стовпцях.

ПРАВЕ ЗОВНІШНЄ З'ЄДНАННЯ

Цей тип об’єднання повертає всі рядки з правої таблиці та лише ті, що мають відповідні значення в лівій таблиці. Наприклад:

SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid
FROM Students
RIGHT OUTER JOIN Fee
ON Students.admission = Fee.admission

Оператор для OUTER JOINS у SQL Server повертає такий результат:

Результат RIGHT OUTER JOIN зберігаєтьсяping кожен рядок "Плата" та відповідні рядки "Студенти"

Причина вищезазначеного виводу полягає в тому, що всі рядки в таблиці «Плата» доступні в таблиці «Студенти», коли вони зіставляються в стовпці вступу.

ПОВНЕ ПРИЄДНАННЯ

Цей тип об'єднання повертає всі рядки з обох таблиць, зі значеннями NULL, якщо умова JOIN не виконується. Наприклад:

SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid
FROM Students
FULL OUTER JOIN Fee
ON Students.admission = Fee.admission

Код повертає наступний результат для запитів FULL OUTER JOIN у SQL, об'єднуючи кожен рядок з обох таблиць:

Результат ПОВНОГО ЗОВНІШНЬОГО ОБ'ЄДНАННЯ, що об'єднує всі рядки Students та Fee з NULL для пропусків

Поширені запитання

Перехресне об'єднання повертає декартів добуток двох таблиць, поєднуючи кожен рядок першої таблиці з кожним рядком другої. Умова ON відсутня, тому таблиця з 10 та 5 рядками дає 50 рядків.

Ви використовуєте самооб'єднання: таблиця відображається двічі з різними псевдонімами, а потім об'єднується за пов'язаним стовпцем для порівняння рядків в одній таблиці. Це поширено для ієрархічних даних, таких як зіставлення кожного співробітника з його керівником.

JOIN об'єднує стовпці з пов'язаних таблиць поруч, збігаючи рядки за умовою. UNION об'єднує результати двох запитів SELECT вертикально, додаючи рядки. JOIN розширює результат; UNION подовжує його.

Так. Речення ON може перевіряти кілька стовпців, об'єднаних за допомогою оператора AND, наприклад ON a.col1 = b.col1 AND a.col2 = b.col2. Складені умови поширені, коли один стовпець не ідентифікує рядок однозначно.

Речення ON визначає, як зіставляються таблиці, і застосовується під час виконання об'єднання. Речення WHERE фільтрує об'єднаний результат після цього. За допомогою OUTER JOIN переміщення умови між ними може змінити повернуті рядки.

Так. Запис JOIN без префікса за замовчуванням призводить до INNER JOIN, тому повертаються лише збіги рядків. Додавання LEFT, RIGHT або FULL перед OUTER JOIN змінює, які незбіги рядки залишаються в результаті.

Так. Копілот GitHub може створювати запити INNER, LEFT, RIGHT та FULL OUTER JOIN з командного рядка природною мовою. Завжди перевіряйте умову ON та тип об'єднання, щоб результуючий набір відповідав задуманому.

Асистенти на основі штучного інтелекту та машинного навчання пропонують правильний тип об'єднання, генерують умови ON для кількох таблиць та позначають відсутні ключі або випадкові декартові добутки. Вони також можуть рекомендувати індекси для стовпців об'єднання. Розробник перевіряє кожну пропозицію перед її запуском.

Підсумуйте цей пост за допомогою: