Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л-8,9.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
101.38 Кб
Скачать

Ліве та праве з’єднання (left (right) outer join)

В SQL запитах таблиця, вказана зліва від оператора JOIN, називається лівою, а вказана справа від нього – правою. При лівому або правому з’єднанні в багатьох СУБД слово OUTER опускається.

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

Припустимо, в базі даних є дві таблиці:

Proposition (ID_tov, cina, opys);

Sklad(ID_tov, kilk).

При цьому в таблиці Sklad можуть міститись не всі товари, які пропонуються для продажу.

Щоб отримати список усіх товарів, які продаються з вказанням їх кількості на складі, достатньо виконати наступний запит:

SELECT Pr.ID_tov, Pr.opys, Sklad.kilk

FROM Proposition Pr LEFT JOIN Sklad

ON Pr.ID_tov=Sklad.ID_tov;

В результатній таблиці у стовпці kilk будуть пусті (тобто NULL) значення тих товарів, яких нема на складі.

Еквівалентний запит, який не використовує ключових слів LEFT JOIN, виглядає досить громіздким:

SELECT Pr.ID_tov, Pr.opys, Sklad.kilk

FROM Proposition Pr, Sklad

WHERE Pr.ID_tov=Sklad.ID_tov

UNION

SELECT Pr.ID_tov, Pr.opys, NULL

FROM Proposition Pr

WHERE Pr.ID_tov NOT IN

(SELECT Pr.ID_tov FROM Proposition Pr, Sklad

WHERE Pr.ID_tov=Sklad.ID_tov

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

Щоб вирішити попередню задачу, використовуючи праве з’єднання, достатньо просто поміняти місцями імена таблиць:

SELECT Pr.ID_tov, Pr.opys, Sklad.kilk

FROM Sklad RIGHT JOIN Proposition Pr

ON Pr.ID_tov=Sklad.ID_tov;

Повне з’єднання (full join)

Повне з’єднання виконує одночасно і ліве, і праве з’єднання. Ключовими словами в такому запиті є FULL JOIN.

Припустимо, база даних деякої компанії містить відомості про свої представництва, відділи та співробітників. Ця інформація розміщена в трьох таблицях:

Predstavn(ID_pr, adress),

Viddil(ID_vid,ID_pr,nazva),

Spivrob(ID_spivr, ID_vid,name).

Щоб переглянути усі представництва, відділи і усіх співробітників, незалежно від того, чи є в одних таблицях відповідні записи з других, використовується повне з’єднання:

SELECT *

FROM Predstavn Pr FULL JOIN Viddil

ON Pr.ID_pr=Viddil.ID_pr

FULL JOIN Spivrob Sp

ON Viddil.ID_vid= Sp.ID_vid;

Зауважимо, що в MS Access оператор FULL JOIN не підтримується.

Об’єднане з’єднання (union join)

Операцію об’єднаного з’єднання ще називають об’єднаним злиттям. Ключовими словами в запиті з таким з’єднанням є UNION JOIN.

При об’єднаному з’єднанні створюється віртуальна таблиця, яка містить усі стовпці двох вихідних таблиць. При цьому стовпці з лівої вихідної таблиці містять усі свої записи, а в тих же записах в стовпцях з правої таблиці містяться значення NULL. Аналогічно, стовпці з правої таблиці містять усі свої записи, а ці ж записи з лівої таблиці містять NULL. Загальна кількість записів, які містяться в результатній таблиці рівна сумі кількості записів, які є в обох вихідних таблицях.

В якості прикладу приведемо простий запит:

SELECT * FROM T1 UNION JOIN T2;

Покажемо дві таблиці і результат їх об’єднаного з’єднання:

T1

A

B

C

a1

b1

c1

a2

b2

c2

a3

b3

c3

a4

b4

c4

T2

X

Y

x1

y1

x2

y2

x3

y3

Об’єднане з’єднанняT1 та T2

A

B

C

X

Y

a1

b1

c1

a2

b2

c2

a3

b3

c3

a4

b4

c4

x1

y1

x2

y2

x3

y3

Як правило, результат об’єднаного з’єднання розглядається в якості проміжкового при виконанні більш складного запиту.

1