багато табличні запити
Одна з найбільш важливих особливостей запитів 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)