Перейти до вмісту

Join (SQL)

Матеріал з Вікіпедії — вільної енциклопедії.

Об'єднання (SQL) - операція об'єднання, що в SQL позначається як JOIN об'єднує дві таблиці в реляційній базі даних утворюючи нову тимчасову таблицю, яку інколи називають "об'єднаною таблицею". В SQL існують такі типи об'єднання: внутрішнє - INNER, зовнішнє - OUTER. Зовнішнє об'єднання поділяють на ліве зовнішнє - LEFT OUTER та праве зовнішнє - RIGHT OUTER. В деяких випадках таблиці можна об'єднувати з собою, таке об'єднання зветься самооб'єднанням.

З математичної точки зору операція об'єднання є фундаментальною операцією реляційної алгебри.

Таблиці для прикладів

Всі пояснення про типи об'єднання в цій статті будуть використовувати наступні дві таблиці:

таблиця Відділ
КодВідділу НазваВідділу
31 Продажі
33 Розробка
34 Бухгалтерія
35 Маркетинг
таблиця Працівник
Прізвище КодВідділу
Луценко 31
Ющенко 33
Тимошенко 33
Янукович 34
Литвин 34
Симоненко 36


Зауваження: Відділ маркетингу (код - 35) на даний момент не має працівників. З іншого боку працівник "Симоненко" має код відділу, який не вказує на жоден відділ в таблиці Відділ.


Внутрішнє об'єднання

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

Цей тип об'єднання трапляється найчастіше.

Приклад явного внутрішнього об'єднання:

SELECT *
FROM   Працівник 
       INNER JOIN Відділ 
          ON Працівник.КодВідділу = Відділ.КодВідділу

Приклад неявного внутрішнього об'єднання:

SELECT *  
FROM   Працівник, Відділ 
WHERE  Працівник.КодВідділу = Відділ.КодВідділу

Результат явного внутрішнього об'єднання:

Працівник.Прізвище Працівник.КодВідділу Відділ.НазваВідділу Відділ.КодВідділу
Литвин 34 Бухгалтерія 34
Ющенко 33 Розробка 33
Янукович 34 Бухгалтерія 34
Тимошенко 33 Розробка 33
Луценко 31 Продажі 31

Зауваження: Працівник "Симоненко" та відділ "Маркетинг" відсутні в результуючій таблиці, бо Працівник "Симоненко" має КодВідділу = 36, а відділу з таким кодом в таблиці Відділ немає; а відділ "Маркетинг" з КодВідділу = 35 не має жодного елементу з таким кодом в таблиці Працівник.

Зовнішнє об'єднання

Ліве зовнішнє об'єднання

Праве зовнішнє об'єднання

Повне зовнішнє об'єднання