багато табличні запити

Одна з найбільш важливих особливостей запитів SQL - це їх здатність визначати зв'язки між численними таблицями і виводити всю інформацію з них в термінах цих зв'язків, всередині однієї команди. Цей вид операції називається - з'єднанням (JOIN).

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

Скласти список всіх співробітників, що працюють в Мінському відділенні.

SELECT fname. lname. position. S.tel_no

FROM branch B. staff S

WHERE B.bno = S.bno AND city = 'Мінськ';

При відпрацюванні запиту СУБД повинна зробити ряд дій, пов'язаних із з'єднанням таблиць branch і staff. Так спочатку проглядається стовпець city з метою фільтрації рядків зі значеннями відмінними від значення 'Мінськ', далі для відфільтрованих рядків таблиці визначаються значення стовпця bno як ідентифікаторів Мінських відділень. Після цього проглядається таблиця staff F з метою виявлення рядків зі значеннями в стовпці bno відповідними ідентифікатору першого виявленого Мінського офісу. У знайдених рядках залишаються значення стовпців зазначених після ключового слова SELECT. Далі ця ж таблиця проглядається для виявлення рядків відповідних "другого" Мінському офісу і т. Д. До останнього. В результаті формується таблиця результатів з запитаної інформацією.

Відзначимо деякі особливості багатотабличних запитів. Як видно з прикладу, в багатотабличного запиті часто використовуються повні імена стовпців, при цьому в реченні FROM вказуються псевдоніми таблиць, щоб спростити звернення до стовпців по повному імені, а також забезпечити однозначність посилань на стовпці. Крім цього особливого сенсу може мати вибір всіх стовпців (SELECT *), наприклад:

FROM staff s. branch b

Крім об'єднання двох таблиць SQL допускає також об'єднання трьох і більше таблиць. Обмежень за кількістю поєднуваних таблиць ні стандарт, ні розробники СУБД не передбачають, однак слід мати на увазі, що при збільшенні кількості об'єднуються таблиць в запиті знижується його "читабельність" і швидкість виконання в силу значного збільшення витрат ресурсів і машинного часу при його обробці.

У додатках, призначених для оперативної обробки транзакцій (OLTP), запит зазвичай посилається тільки на одну або дві таблиці. У цих додатках час відповіді є критичною величиною, користувач, як правило, вводить один або два елементи даних, і йому потрібно отримати відповідь від бази даних протягом однієї або двох секунд.

В OLAP-додатках, призначених для підтримки, прийняття рішень, запит, як правило, звертається до багатьох таблиць і використовує складні відносини, що існують в базі даних. У цих додатках результати запиту потрібні для прийняття важливих рішень, тому цілком прийнятними вважаються запити, які виконуються кілька хвилин і більше.

Крім того, комбінування результуючих таблиць можна здійснювати за допомогою операторів UNION - об'єднання, INTERSECT - перетин, EXCEPT (minus) - різниця.

При цьому на таблиці накладаються певні обмеження, тобто таблиці повинні бути сумісні по з'єднанню - мати одну і ту ж структуру: однакову кількість стовпців, в шпальтах розміщуються дані одного типу і довжини.

Обов'язок перевіряти приналежність даних до одного домену покладається на користувача. Загальний синтаксис застосування операторів комбінування:

Приклад. Вивести список всіх регіонів, в яких або знаходиться відділення компанії, або розташовуються здаються в оренду об'єкти:

WHERE area IS NOT NULL)