Найбільш часто потрібно провести з'єднання за загальними стовпцях двох таблиць - по первинному і зовнішньому ключу. В цьому випадку в реченні WHERE задається умова рівності стовпчика з однієї таблиці і відповідного стовпчика з іншої таблиці. При цьому рядки однієї таблиці з'єднуються з рядками іншої відповідно до загальних значень у шпальтах.
Приклад: Для кожного службовця вивести його прізвище і назва відділу, в якому він працює.
Прізвища службовців знаходяться в таблиці s_emp, в той час як назви відділів знаходяться в таблиці s_dept. У таблиці s_emp є стовпець dept_id, який містить номер відділу службовця і є зовнішнім ключем по відношенню до таблиці s_dept. У таблиці s_dept також є стовпець, що містить номер відділу - id, він є первинним ключем таблиці s_dept. Нам необхідно для кожного службовця з таблиці s_emp знайти його номер відділу, а потім знайти такий же номер відділу в таблиці s_dept і по ньому визначити назву відділу.
SELECT s_emp.last_name, s_dept.name
FROM s_dept, s_emp
25 rows selected.
Зверніть увагу, в наведеному вище прикладі імена стовпців предваряются іменами таблиць, з яких повинні бути обрані ці стовпці. Справа в тому, що в різних таблицях можуть бути стовпчики з однаковими іменами. Наприклад, в нашому прикладі і в таблиці s_emp і в таблиці s_dept є стовпець з ім'ям id. Щоб вказати серверу, з якої саме таблиці вибирати стовпці, необхідно ставити префікс у вигляді імені таблиці перед кожним ім'ям стовпця, яке може бути витлумачено неоднозначно. Ім'я таблиці і ім'я стовпця при цьому розділяються крапкою. У разі, якщо префікс не буде зазначений, виникне помилка.
Приклад: Для кожного службовця вивести його прізвище і назва відділу, в якому він працює.
SELECT last_name, name
FROM s_dept, s_emp
ERROR at line 3:
ORA-00918: column ambiguously defined
Якщо однойменних стовпців в запиті немає, то вказівка імен таблиць взагалі не обов'язково. Але рекомендується при виконанні вибірки з декількох таблиць в будь-якому випадку вказувати імена таблиць, так як це збільшує продуктивність обробки запиту сервером і покращує читабельність запиту.
Якщо крім умови з'єднання необхідно задати умови, що обмежують вибірку рядків, ці умови записуються за допомогою оператора AND.
Приклад: Знайти назву відділу і назва регіону, в якому цей відділ знаходиться для відділу №35.
SELECT s_dept.name, s_region.name
FROM s_dept, s_region
Попереджання кожного імені стовпця ім'ям відповідної таблиці може зайняти багато часу, особливо, якщо запит містить велику кількість імен стовпців, а імена таблиць довгі. Тому замість імен можна використовувати більш короткі псевдоніми таблиць. Ім'я користувача таблиці задається після імені таблиці в реченні FROM і привласнює таблиці інше ім'я в рамках одного конкретного запиту. Використання псевдонімів таблиць дозволяє зменшити обсяг коду SQL, що скорочує витрату пам'яті.
Псевдоніми таблиць можуть містити до тридцяти символів, але чим вони коротші, тим краще. Якщо Ви задали псевдонім таблиці в реченні FROM, він повинен використовуватися замість імені цієї таблиці в усьому тексті запиту.
Приклад: Для кожної фірми-клієнта вибрати її номер, найменування, прізвище її торгового представника і назва регіону, в якому вона розташовується.
SELECT c.id, c.name, e.last_name, r.name
FROM s_customer c, s_emp e, s_region r
WHERE c.sales_rep_id = e.id and c.region_id = r.id;
ID NAME LAST_NAME NAME
201 Unisports Giljum South America
202 OJ Atheletics Nguyen Asia
203 Delhi Sports Nguyen Asia
204 Womansport Magee North America
205 Kam's Sporting Goods Dumas Asia
206 Sportique Dumas Europe
208 Muench Sports Dumas Europe
209 Beisbol Si! Magee North America
210 Futbol Sonora Giljum South America
14 rows selected.
Зверніть увагу, в попередньому прикладі з'єднуються три таблиці, тому задано 2 умови з'єднання. (Умова з'єднання таблиці s_customer і s_emp і умова з'єднання s_customer і s_region.) У будь-якому випадку при з'єднанні n таблиць кількість умов з'єднання повинно бути як мінімум n-1, в іншому випадку Ви отримаєте декартовій твір таблиць.