Природне з'єднання
Еквіз'єднання
Стовпці, що обчислюються
У фразі 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, так і за допомогою реляційної алгебри.