Рекомендуємо, 2020

Вибір Редакції

Різниця між лівим, правим і повним зовнішнім з'єднанням

Раніше ми обговорювали відмінності між Inner Join та Outer Join, де ми розглянули типи Outer Join. Outer Join - це той, хто зберігає кортежі в результаті, який був би втрачений під час операції приєднання. У цій статті; ми будемо обговорювати відмінності між типами Outer Join. Існує три типи зовнішнього з'єднання; Ліве зовнішнє приєднання, праворуч приєднання та повне зовнішнє приєднання. Лівий, правий і повне зовнішнє приєднання відрізняється за своїм планом виконання і отриманими результатами. Ми можемо опустити зовнішнє слово з лівого, правого і повного зовнішнього з'єднання. Давайте розглянемо відмінності між лівим, правим і повним зовнішнім з'єднанням за допомогою діаграми порівняння, показаної нижче.

Діаграма порівняння

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

Визначення лівого зовнішнього об'єднання

Припустимо, що у нас є “ Table_A Left Outer Join Table_B ”. Таким чином, Table_A є нашою лівою таблицею, яка відображається ліворуч від лівої зовнішньої операції приєднання, а Table_B - нашою правою таблицею.

Спочатку внутрішнє з'єднання буде застосовано до Table_A і Table_B, яке повертає весь відповідний кортеж з таблиць A і B.

Потім він поверне всі кортежі з Table_A, які не мають відповідного кортежу в Table_B. Такі, що результуючі кортежі будуть доповнені значеннями NULL для атрибутів правої таблиці.

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

Давайте обговоримо ліве зовнішнє приєднання з прикладом; ми маємо дві таблиці, таблицю студентів та таблицю департаментів .

Тепер, ми будемо застосовувати ліву зовнішню приєднання, на стіл студента і департаменту.

SELECT * FROM Студент LEFT OUTER JOIN Відділ
ON Студент. Student_ID = Department.Student_ID

У запиті вище, таблиця Student є лівою таблицею, а таблиця - правою таблицею. Таким чином, згідно з лівим зовнішнім приєднанням, результат повинен мати всі кортежі з таблиці студентів, і тільки відповідні кортежі з таблиці відділу.

Дотримуйтесь результату, отриманого з лівого зовнішнього з'єднання; він має всі кортежі зі столу студента разом з відповідними кортежами з таблиці студента та відділу. Student_id Джиммі, Джозеф Гаррі з таблиці студента не був присутній в таблиці Департаменту. Отже, значення атрибутів таблиці Департаменту для Джиммі, Джозефа Гаррі поширюються на NULL.

Визначення правого зовнішнього об'єднання

Припустимо, у нас є “ Table_A Right Outer Join Table_B ”. Таким чином, Table_A є нашою лівою таблицею, яка відображається ліворуч від операції Right Outer Join, а Table_B - наша права таблиця.

Як і в лівому зовнішньому приєднанні, спочатку внутрішнє приєднання буде застосовано до Table_A і Table_B, яке поверне весь відповідний кортеж з таблиць A і B.

Потім він поверне всі кортежі з Table_B, які не мають відповідного кортежу в Table_A. Такі, що результуючі кортежі будуть доповнені значеннями NULL для атрибутів лівої таблиці.

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

Давайте обговоримо з нашим прикладом праворуч. вище ми маємо дві таблиці, таблицю студентів і таблицю департаментів.

Тепер ми застосуємо таблицю « Право зовнішнє приєднання до таблиці студентів» і «Департамент».

ВИБІР * ВІД ОСНОВНОГО ВСТАНОВЛЕННЯ Студентський відділ
ON Студент. Student_ID = Department.Student_ID

У запиті, наведеному вище, таблиця студентів є нашою лівою таблицею, а таблиця відділу - наша права таблиця. Відповідно до операції Right Outer Join, результат повинен включати всі кортежі з таблиці Департаменту і лише узгоджувати кортежі з таблиці студентів.

Спостерігати результат, отриманий з правого зовнішнього з'єднання; він має всі кортежі з таблиці відділу разом з відповідними кортежами з таблиці студента та відділу. Student_ID 10536 і 00954 таблиці департаменту, не присутні в таблиці студента. Отже, значення атрибута Name для Student_ID 10536 і 00954 поширюється на NULL.

Визначення повного зовнішнього об'єднання

Припустимо, у нас є “ Table_A Повна зовнішня таблиця приєднання ”. Таким чином, Table_A є нашою лівою таблицею, оскільки вона виглядає ліворуч від операції Full Outer Join і Table_B - наша права таблиця.

Повне зовнішнє приєднання - це комбінація обох, лівого зовнішнього приєднання та праворуч . Спочатку він застосовує внутрішнє з'єднання на Table_A і Table_B для отримання відповідних кортежів з обох таблиць. Потім він розширює ті кортежі Table_A з NULL, які не мають відповідного кортежу в Table_B. Крім того, він розширює ці кортежі з Table_B з NULL, які не мають відповідного кортежу в Table_A.

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

Давайте обговоримо FULL Outer Join з прикладом; ми маємо дві таблиці вище, таблицю студентів і таблицю департаментів .

Тепер ми застосуємо повне зовнішнє приєднання до таблиці студентів та таблиці відділу.

SELECT * Відділ FULL OUTER JOIN
ON Студент. Student_ID = Department.Student_ID

У запиті, наведеному вище, таблиця студентів є нашою лівою таблицею, а таблиця відділу - наша права таблиця. Відповідно до Full Outer Join, результат повинен включати всі кортежі з обох таблиць.

Спостерігати результат, отриманий від повного зовнішнього з'єднання; він має всі кортежі зі столу студента та відділу разом з відповідними кортежами з таблиці студента та відділу. Student_id Джиммі, Джозеф Гаррі, тобто 10026, 02256, 56362 відповідно, таблиці студента, не був присутній в таблиці відділу. Отже, значення атрибутів таблиці Департаменту для Джиммі, Джозефа Гаррі поширюються на NULL . Student_ID 10536 і 00954 таблиці відділів не представлені в стовпці Student_ID таблиці студентів. Отже, значення атрибута Name атрибута для Student_ID 10536 і 00954 поширюється на NULL .

Ключові відмінності між лівим, правим і повним зовнішнім об'єднанням

  1. Результат лівого зовнішнього приєднання має всі кортежі лівої таблиці. Аналогічно, результат правого зовнішнього приєднання має всі кортежі правої таблиці. А результат повної зовнішньої приєднання має всі кортежі як з лівого, так і з правого столу.
  2. У лівому зовнішньому приєднанні кортежі лівої таблиці, які не мають відповідного кортежу в правій таблиці, розширюються значеннями Null для атрибутів правої таблиці. Протилежний випадок стосується правого зовнішнього приєднання. І в повному зовнішньому приєднанні кортежі з лівої і правої таблиць, які не мають відповідних кортежів у правій і лівій таблицях, відповідно розширюються з NULL для атрибутів правої і лівої таблиці відповідно.

Висновок:

Подбайте про позиції назв таблиць у запиті. Як позиція імені таблиці в запиті вирішує, чи буде таблиця розглядатися як ліва таблиця або права таблиця.

Top