Внутрішнє приєднання проти зовнішнього приєднання
Внутрішнє з'єднання та Зовнішнє приєднання - це два способи приєднання SQL, що використовуються при обробці запитів для баз даних. Вони належать до родини приєднаних застережень (інші два - «Лівий» і «Правий приєднання»). Однак є Self Join, який можна використовувати для спеціалізованих ситуацій. Мета об’єднання - об'єднати поля, використовуючи загальні значення, до двох таблиць. Ці об'єднання об'єднують записи з декількох таблиць у базі даних. Він створює результуючі набори, які можна зберегти як іншу таблицю.
Що таке внутрішнє приєднання?
Найчастіше використовується операція SQL Join - Внутрішня приєднання. Це може розглядатися як типовий тип з'єднання, який використовується в додатках. Внутрішнє з'єднання використовує предикат приєднання для об'єднання двох таблиць. Якщо припустити, що дві таблиці A і B, то присудок приєднання порівняє рядки A і B, щоб з’ясувати всі пари, які задовольняють присудок. Значення стовпців усіх задоволених рядків таблиць A і B об'єднуються для створення результату. Можна розглядати як спочатку взяття перехресного з'єднання (декартового продукту) усіх записів, а потім повернення лише тих записів, які задовольняють присудок приєднання. Однак насправді декартовий продукт не розраховується, оскільки він дуже неефективний. Натомість використовується хеш-приєднання або сортування-злиття.
Що таке зовнішнє приєднання?
На відміну від "Внутрішнє з'єднання", зовнішнє з'єднання зберігає всі записи, навіть якщо він не може знайти відповідний запис. Це означає, що зовнішньому об'єднанню потрібен запис, щоб знайти відповідний запис, щоб він відображався в результаті. Натомість він поверне всі записи, але незрівняні записи матимуть нульові значення. Зовнішні приєднання поділяються на три підкатегорії. Вони - ліве зовнішнє з'єднання, праве зовнішнє з'єднання і повне зовнішнє з'єднання. Ця диференціація заснована на тому, який рядок таблиці (ліва таблиця, права таблиця або обидві таблиці) зберігається при знаходженні невідповідних записів. Ліві зовнішні з'єднання (також відомі як просто ліве з'єднання) зберігають усі записи лівої таблиці. Це означає, що навіть якщо записи відповідності числам дорівнюють нулю, вони все одно матимуть записи в таблиці результатів, але матимуть нульові значення для всіх стовпців B. Іншими словами, усі значення з лівої таблиці повертаються із зіставленими значеннями справа таблиця (або нульові значення, коли їх немає). Якщо значення з декількох рядків з лівої таблиці співпадають з одним рядком з правої таблиці, рядок з правої таблиці буде повторений у міру необхідності. Правий зовнішній з'єднання в значній мірі схожий з лівим зовнішнім з'єднанням, але обробка таблиць шанується. Це означає, що результат матиме всі рядки правої таблиці принаймні один раз із зіставленими значеннями лівої таблиці (та нульовими значеннями для невідповідних правих значень). Повне зовнішнє з'єднання є більш комплексним, ніж зовнішнє з’єднання лівого та правого. Це призводить до поєднання ефекту застосування лівого та правого зовнішнього з'єднаних разом.
Яка різниця між Внутрішнім приєднанням та Зовнішнім приєднанням?
Внутрішня приєднаність не зберігає незрівняні рядки в результаті, але зовнішнє з'єднання збереже всі записи щонайменше з однієї таблиці (залежно від того, яке зовнішнє з'єднання було використано). Отже, поведінка відсутності інформації про незрівняні рядки в таблиці результатів небажана, потрібно завжди використовувати одне із зовнішніх з'єднань (замість внутрішнього з'єднання). Внутрішнє приєднання може не дати результату, якщо не знайдено збігів. Але зовнішнє з'єднання завжди створюватиме результуючу таблицю навіть без відповідних рядків. Внутрішнє з'єднання завжди повертає таблиці зі значеннями (якщо вони повернуті). Але зовнішні з'єднання можуть призвести до таблиць з нульовими значеннями.