Еквісоедіненія - студопедія

Найбільш часто потрібно провести з'єднання за загальними стовпцях двох таблиць - по первинному і зовнішньому ключу. В цьому випадку в реченні 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, в іншому випадку Ви отримаєте декартовій твір таблиць.

Схожі статті