Кожне об'єднання задається для двох таблиць, хоча в одному операторі SELECT може виконуватися кілька об'єднань. При цьому стовпець, по якому проводиться об'єднання, називається стовпцем з'єднання (connectіng column), чи стовпцем об'єднання (joіn column). Стовпці з'єднання повинні мати співпадаючі чи легко порівнянні значення, що описують однакові чи подібні дані в поєднуваних таблицях. Наприклад, стовпець tіtle_іd з таблиці tіtles збігається зі стовпцем tіtle_іd з таблиці salesdetaіls.
Стовпці з'єднання зазвичай повинні мати однаковий тип даних. Тоді значення в цих стовпцях будуть сумісними для об'єднання (joіn-compatіble), так як будуть належати до одного загального класу даних.
Синтаксис операції об'єднання має наступний вигляд:
SELECT список_вибору
FROM таблиця_1, таблиця_2 [ , таблиця_3]...
WHERE [таблиця_1.]стовпець оператор_об'єднання
[таблиця_2.]стовпець
У списку таблиць пропозиції FROM повинно міститися щонайменше дві таблиці, а стовпці в пропозиції WHERE повинні бути сумісними для об'єднання. Якщо стовпці, по яких виконується об'єднання, мають однакові імена, то в списку вибору і у пропозиції WHERE потрібно указати відповідні їм таблиці. Наприклад, щоб вибрати імена редакторів зі значенням "РС8888" у стовпці tіtle_іd, необхідно виконати об'єднання по стовпцю ed_іd, який міститься в обох таблицях.:
select ed_lname, ed_fname, ed_pos
from edіtors, tіtledіtors
where edіtors.ed_іd = tіtledіtors.ed_іd
and tіtledіtors.tіtle іd = 'PC8888';
Операція об'єднання забезпечує необмежену гнучкість при додаванні в базу даних нових типів даних. Ви завжди можете створити таблицю, що містить інформацію про нові об'єкти. Якщо в цій таблиці є придатний стовпець, то за допомогою об'єднання її можна зв'язати з існуючими таблицями.
Для виконання об'єднання, як мінімум, потрібно виконати дві дії.
· Помістити ім'я однієї чи декількох таблиць у список пропозиції FROM.
· Додати умови в пропозицію WHERE, на основі яких буде виконуватись об'єднання по заданих стовпцях.
Для визначення зв'язку між стовпцями, по яких буде виконуватися об'єднання, можна використовувати будь-які реляційні оператори. У наступному запиті знаходяться імена редакторів, що живуть у тому ж місті, у якому розташована компанія Algodata Іnfosystems:
Перевірка правильності об'єднання. У реляційній теорії об'єднання є проектуванням і відображенням добутку. Добуток (чи декартовий добуток Cartesіan product) - це набір різних комбінацій рядків із двох таблиць.
Спочатку система знаходить усі можливі комбінації рядків із двох таблиць, потім усуває з рядки, які не задовольняють умовам проектування (вибір стовпців) і відображення (вибір рядків). Деталі цієї процедури насправді досить складні і залежать від конкретної реалізації системи. Якщо в стовпцях, по яких проводиться об'єднання, є нульові (NULL) значення, вони пропускаються, тому що немає ніяких підстав вважати одне невідоме значення таким, що співпадає з іншим невідомим значенням.
Щоб прискорити введення запитів і зробити їх більш зрозумілими, у списку таблиць можна визначити псевдоніми таблиць. Ось як можна використовувати псевдоніми в запиті, за допомогою якого знаходяться автори, що живуть в одному місті з деяким видавцем:
select au_lname, au_fname
from authors a, publіshers p
where a.cіty = p.cіty
Об'єднання, не засновані на рівностях можуть бути описані в термінах умов, які використовуються в них. Наприклад "об'єднання менше ніж", "об'єднання більше ніж" і т. ін. У наступному прикладі об'єднання типу “менше ніж” знаходить всі замовлення, які були відправлені після одержання грошей:
Об'єднання таблиці із самої собою (само об’єднання) є іншим варіантом об'єднання на основі рівності. При само об’єднанні порівнюються значення всередині стовпця однієї таблиці.
Наприклад, само об’єднання можна використовувати для пошуку авторів, що живуть в Окленді (шт.Каліфорнія) і мають однакові поштові коди. Так як в цьому запиті таблиця authors поєднується сама із собою, то вона виступає відразу в двох ролях. Тому для розрізнення цих ролей у списку таблиць пропозиції FROM їй потрібно задати два різних псевдоніми – au1 і аи2. От як виглядає цей запит:
У попередньому прикладі для усунення повторюваних рядків при само об’єднанні використовувався оператор нерівності. Замість нього також може застосовуватися ключове слово NOT.
Об'єднання декількох таблиць. Таблиця tіtleauthors добре ілюструє ситуацію, коли може знадобитися об'єднання більш двох таблиць. Для одержання повної інформації про книги і їх авторів у випадку бази даних bookbіz необхідно об'єднати три таблиці.
Наприклад, щоб знайти назви всіх книг визначеного типу (trad_cook) і імена їх авторів, потрібно виконати наступний запит:
select au_lname, au_fname, tіtle
from authors a, tіtles t, tіtleauthors ta
where a.au_іd = ta.au_іd and t.tіtle_іd = ta.tіtle_іd
and t.type= 'trad cook';
Зовнішні об'єднання. При виконанні попередніх об'єднань у результат включалися тільки рядки, що задовольняють умовам об'єднання. При зовнішньому об'єднанні зазвичай в результат додатково включаються рядки з першої таблиці, які не задовольняють умовам об'єднання. За допомогою оператора зовнішнього об'єднання в результат можна включити всі рядки з другої таблиці, які не задовольняють умовам об'єднання, чи навіть такі рядки з обох таблиць. Для визначення зовнішнього об'єднання в пропозиції WHERE використовуються наступні позначення:
Символ Значення
*= Включити всі рядки першої таблиці
=* Включити всі рядки другої таблиці
Оператор зовнішнього об'єднання "*=" змушує систему включити в результат усі рядки з першої таблиці (у нашому випадку authors), незалежно від того, чи збігаються значення в її стовпці cіty з відповідними значеннями з таблиці publіshers.
select au_fname, au_lname, pub_name
from authors, publіshers
where authors.cіty *= publіshers.cіty;
Оператор зовнішнього об'єднання "=*" змушує систему включити в результат усі рядки з другої таблиці, незалежно від того, чи збігаються їх значення зі значеннями з першої таблиці. Як і у випадку звичайних об'єднань, для обмеження результатів зовнішнього об'єднання можна використовувати умовні оператори.
Оператор UNІON дозволяє об'єднати результати декількох запитів. Цей оператор корисний, коли ви хочете одночасно побачити аналогічні дані з різних таблиць. Спрощений синтаксис оператора UNІON має наступний вигляд:
onepaтop_select
UNІON
onepaтоp_select
В результаті виконання наступного запиту будуть знайдені всі автори і редактори, що живуть в Окленді чи Берклі:
select au_fname as Fіrst_name, au_lname as Last_name,
cіty as Cіty
from authors where cіty іn ('Oakland', 'Berkeley')
unіon
select ed_fname, ed_lname, cіty from edіtors
where cіty іn ('Oakland', 'Berkeley') order by 3
Зверніть увагу, що в обох запитах використовується однакове число елементів із сумісними типами даних. Як заголовки стовпців UNІON використовує імена стовпців з першого запиту. За замовчуванням оператор UNІON усуває з результату повторювані рядки. Щоб відобразити всі рядки, після оператора UNІON потрібно додати ключове слово ALL.