Природне з'єднання

Еквіз'єднання

Стовпці, що обчислюються

У фразі SELECT можна сформувати новий стовпець. У ньому записуватимуться ре­зультати обчислення виразу, в якому використовуються значення з інших стовп­ців таблиць, що з'єднуються. Наведений нижче запит видає дані про всі кафедри факультету інформатики разом з їхніми фондами та інформацією про те, яку ча­стку становить фонд кафедри від загального фонду факультету.

 

SELECT d.Назва. скФонд. (d.Фонд / f.Фонд) * 100

FROM ФАКУЛЬТЕТ f. КАФЕДРА d

WHERE f.#F = d.#F AND F.Назва = "інформатики"

 

Якщо таблиці з'єднуються за рівністю значень в одній чи кількох парах стовпців, до того ж із кожної таблиці вибираються всі стовпці, то таке з'єднання відповідає операції еквіз'єднання реляційної алгебри. Наприклад:

SELECT f.*. d.*

FROM ФАКУЛЬТЕТ f, КАФЕДРА d

WHERE f.#F = d.#F

 

Операція природного з'єднання здійснюється з'єднанням двох чи кількох таблиць за рівністю значень в одній чи кількох парах стовпців із наступним видаленням повторюваних стовпців (необхідні стовпці вказуються у фразі SELECT). Наприклад:

SELECT f.#F, f.Haзвa. f-Декан. f.Kopnyc. f.Фонд, d.#D, d-Назва. d.#3ABІДУВАЧ,

d.Kopпyc. d.Фонд

FROM ФАКУЛЬТЕТ f. КАФЕДРА d

WHERE f.#F = d.#F

Хоча стовпці Назва, Корпус, Фонд є в обох таблицях, однак вони не розглядають­ся як повторювані, оскільки мають різне семантичне навантаження. Стовпцем, який повторюється, є той єдиний, за яким виконується з'єднання, - стовпець #F, що виконує роль зовнішнього ключа в таблиці КАФЕДРА.

 

-з'єднання

Це з'єднання за будь-якою умовою. -з'єднання виконується не за первинним і зовнішнім ключами, а за іншими стовпцями. Раніше наведені різновиди з'єднан­ня є окремими випадками -з'єднання.

З'єднання таблиці зі своєю копією

Інколи необхідно з'єднати таблицю із самою собою. Для цього у фразі FROM по­трібно двічі зазначити назву таблиці з різними псевдонімами, щоб можна було на кожен її екземпляр посилатися окремо. Розглянемо такий приклад. Необхідно перевірити, чи є в таблиці ФАКУЛЬТЕТ пари рядків, де назви факультетів збігаються, а ключі #F різні.

 

SELECT П.Назва, f1.#F. f2.#F

FROMФАКУЛЬТЕТ f1. ФАКУЛЬТЕТ f2

WHERE П.Назва = f2.Haзвa AND f1.#F != f2.#F

З'єднання можна виконувати безпосередньо у фразі FROM, скориставшись од­ним із різновидів оператора JOIN (наприклад, F1 INNER JOIN F2 ON F1.F# = F2.F#). Слід пам'ятати, що за певних обставин потрібно саме виконувати JOIN-з'єднання, а не обчислювати декартів добуток таблиць. Наприклад, декартів добуток двох таб­лиць з десятками тисяч рядків у кожній обчислюватиметься протягом кількох го­дин, а обсяг кінцевої таблиці буде вимірюватися сотнями гігабайтів!

Розглянемо кілька запитів, що вже використовувались як приклади у розділі 3. Запити будемо записувати як мовою SQL, так і за допомогою реляційної алгебри.