Вибірка даних з кількох таблиць (join)

Вибірка даних з кількох таблиць (JOIN)

Досить часто доводиться вибирати дані з декількох таблиць. Для показу в одному запиті даних з декількох таблиць Oracle дозволяє виконувати так звані з'єднання таблиць. Є два відносяться до з'єднання таблиць правила, про які слід постійно пам'ятати. Дані з двох (або декількох) таблиць можуть бути об'єднані в тому випадку, якщо у обох таблиць є співпадає стовпець (з тим же самим або з іншим ім'ям) і цей стовпець в одній з таблиць є первинним ключем (або частиною цього ключа).

SELECT ename, deptno FROM emp ORDER BY deptno;

SELECT deptno, dname FROM dept ORDER BY deptno;

Давайте розглянемо приклад оператора з'єднання (join), що використовує традиційний синтаксис Oracle, де ми об'єднуємо разом вміст таблиць emp і dept для отримання переліку всіх співробітників і назв відділів, де вони працюють:

Зверніть увагу на багато важливих компоненти цього з'єднання таблиць. Використання у фразі FROM двох таблиць чітко вказує на те, що має місце соедініенія таблиць. Зверніть також увагу на те, що перед ім'ям кожної таблиці присутній буква: e для таблиці emp або d для таблиці dept. Це служить ілюстрацією цікавою концепції - стовпці можуть мати псевдоніми точно так же, як їх мають таблиці. Псевдоніми служать важливої ​​мети - вони не дають Oracle заплутатися в тому, яку таблицю використовувати при виведенні даних в стовпець deptno. Згадайте, що в обох таблицях (emp і dept) є стовпці з ім'ям deptno.

Неоднозначності при з'єднанні таблиць можна також уникнути, якщо в якості префікса перед ім'ям стовпця вказати імена таблиць.

Зауважте, що в нашу фразу WHERE включено порівняння по полю deptno, що з'єднує дані в emp з даними в dept. У разі відсутності зв'язку з цим у вихідні дані були ви включені всі дані з emp і dept.

Синтаксис з'єднання по ANSI / ISO

Відповідно до синтаксисом ANSI / ISO, для того, щоб з'єднати вміст двох таблиць для отримання єдиного результату, ми повинні включити в SQL-оператор фразу JOIN ім'я_таблиці ON условіе_соедіненія. Якщо ви хочете відповідно до цього синтаксисом виконати те ж з'єднання таблиць, яке ми робили раніше, наш оператор буде виглядати наступним чином:

Зверніть увагу на відмінності між цим синтаксисом і синтаксисом Oracle. По-перше, в синтаксисі ANSI / ISO порівняння, використовувані для з'єднання, відокремлюються від всіх інших порівнянь за допомогою спеціального ключового слова ON, що вказує на те, що саме це порівняння використовується для з'єднання. Ви як і раніше можете включати до відповідних ANSI / ISO запити на з'єднання фразу WHERE. Єдина відмінність полягає в тому, що фраза WHERE тепер буде містити тільки додаткові оператори порівняння, використовувані дл додаткової фільтрації даних. Крім того, ви не повинні тепер вказувати у фразі FROM імена всіх об'єднуються таблиць. Замість цього відразу ж після фрази FROM ви повинні використовувати фразу JOIN, в якій і буде визначено імена всіх з'єднуються таблиць.

Природні сполуки (NATURAL JOIN)

Природним з'єднанням називається з'єднання між двома таблицями, в якому Oracle з'єднує таблиці по однаково має назву колонки (стовпцями) обох таблиць (природним чином!). Природне з'єднання виконується в тому випадку, якщо вказано ключове слово NATURAL.

Єдиним збігається стовпцем для таблиць emp і dept є стовпець depnto,

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

Тексти програм проекту зберігаються на bitbucket.
Якщо будуть бажаючі додавати свої знання або виправляти помилки і неточності, пишіть в чаті.

Схожі статті