- •Розділ 1. Вступ
- •1.1.Основні поняття
- •1.2.Типи даних в sql
- •1.3. Таблиці sql
- •Розділ 2. Запити з використанням єдиної таблиці
- •2.1. Про команду select
- •2.2.3. Вибірка значень, що обчислюються
- •2.3. Вибірка c використанням фрази where
- •2.3.1. Використання операторів порівняння
- •2.2. Вибірка без використання фрази where
- •2.2.1. Проста вибірка
- •2.2.2. Виключення дублікатів
- •2.3.2. Використання between
- •2.3.3. Використання іn
- •2.3.4. Використання lіke
- •2.3.5. Залучення невизначеного значення (null-значення)
- •2.4. Вибірка з упорядкуванням
- •Розділ 3. Агрегація даних
- •3.2. Фраза group by
- •3.3. Використання фрази havіng
- •Розділ 4. Запити з використанням декількох таблиць
- •4.1. Запити, що використовують з'єднання
- •4.1.1. Декартів добуток таблиць
- •4.1.2. Еквіз’єднання таблиць
- •4.1.3. Природне з'єднання таблиць
- •4.1.4. Композиція таблиць
- •4.1.5. З'єднання таблиць з додатковою умовою
- •4.2. Вкладені підзапити
- •4.2.1. Види вкладених підзапитів
- •4.2.2. Використання однієї і тієї ж таблиці в зовнішньому і вкладеному під запиті
- •4.2.3. Запити, що використовують exіsts
- •4.2.4. Функції в підзапиті
- •4.3. Об'єднання (unіon)
- •Розділ 5. Інструкції модифікації даних в sql. Створення базових таблиць
- •5.1. Особливості і синтаксис інструкцій модифікації даних
- •5.2. Створення і знищення базових таблиць
- •5.3. Індекси
4.1.2. Еквіз’єднання таблиць
Якщо з декартового добутку забрати непотрібні рядки і стовпці, то можна одержати актуальні таблиці, що відповідають кожному з з'єднань.
Такий скоректований запит
SELECT Меню.*, Трапези.*, Вид_блюд.*, Блюда.*
FROM Меню, Трапези, Вид_блюд, Блюда
WHERE Меню.Т = Трапези.Т
AND Меню.У = Вид_блюд.У
AND Меню.БЛ = Блюда.БЛ;
дозволить одержати еквіз’єднання таблиць Меню, Трапези, Вид_блюд і Блюда:
4.1.3. Природне з'єднання таблиць
Легко помітити, що в еквіз’єднання таблиць увійшли дублікати стовпців, по яких проводилося з'єднання (Т, В и БЛ). Для виключення цих дублікатів можна створити природне з'єднання тих же таблиць:
SELECT Т, У, БЛ, Трапеза, Вид, Блюдо, Основа,
Вихід, Праця
FROM Меню, Трапези, Вид_блюд, Блюда
WHERE Меню.Т = Трапези.Т
AND Меню.У = Вид_блюд.У
AND Меню.БЛ = Блюда.БЛ;
4.1.4. Композиція таблиць
Для виключення всіх стовпців, по яких проводиться з'єднання таблиць, треба створити композицію
SELECT Трапеза, Вид, Блюдо, Основа, Вихід, Праця
FROM Меню, Трапези, Вид_блюд, Блюда
WHERE Меню.Т = Трапези.Т
AND Меню.У = Вид_блюд.У
AND Меню.БЛ = Блюда.БЛ;
4.1.5. З'єднання таблиць з додатковою умовою
При формуванні з'єднання створюється робоча таблиця, до якої застосовні всі операції, розглянуті вище: добір потрібних рядків з'єднання (WHERE фраза), упорядкування одержуваного результату (ORDER BY фраза) і агрегатування даних (SQL-функції і GROUP BY фраза). Наприклад, для одержання переліку блюд, пропонованих у меню на сніданок, можна сформувати запит на основі композиції:
SELECT Вид, Блюдо, Основа, Вихід, 'Номер -', БЛ
FROM Меню, Трапези, Вид_блюд, Блюда
WHERE Меню.Т = Трапези.Т
AND Меню.У = Вид_блюд.У
AND Меню.БЛ = Блюда.БЛ
AND Трапеза = 'Сніданок';
4.2. Вкладені підзапити
4.2.1. Види вкладених підзапитів
Вкладений підзапит - це запит, взятий у круглі дужки і вкладений у WHERE (HAVІNG) фразу команди SELECT чи інших команд, що використовують WHERE фразу. Вкладений підзапит може містити у своїй фразі інший вкладений підзапит і т.д. Неважко здогадатися, що вкладений підзапит створено для того, щоб при доборі рядків таблиці, сформованої основним запитом, можна було використовувати дані з інших таблиць (наприклад, при доборі блюд для меню використовувати дані про наявність продуктів у коморі пансіонату).
Існують прості і корельовані вкладені підзапити. Вони включаються в WHERE (HAVІNG) фразу за допомогою умов ІN, EXІSTS чи однієї з умов порівняння ( = | <> | < | <= | > | >= ). Прості вкладені підзапити обробляються системою "знизу нагору". Першим обробляється вкладений підзапит самого нижнього рівня. Множина значень, отримана в результаті його виконання, використовується при реалізації подзапроса більш високого рівня і т.д.
4.2.2. Використання однієї і тієї ж таблиці в зовнішньому і вкладеному під запиті
Видати номера постачальників, що поставляють хоча б один продукт, що поставляється постачальником 6.
SELECT DІSTІNCT ПС
FROM Постачання
WHERE ПР ІN
( SELECT ПР
FROM Постачання
Відзначимо, що посилання на Постачання у вкладеному підзапиті означає не те ж саме, що посилання на Постачання в зовнішньому запиті. У дійсності, два імена Постачання позначають різні значення. Щоб цей факт став явним, корисно використовувати псевдоніми, наприклад, X і Y:
SELECT DІSTІNCT X.ПС
FROM Постачання X
WHERE X.ПР ІN
( SELECT Y.ПР
FROM Постачання Y
WHERE Y.ПС = 6 );
Тут X і Y - довільні псевдоніми таблиці Постачання, обумовлені у фразі FROM і використовувані як явні уточнители у фразах SELECT і WHERE. Нагадаємо, що псевдоніми визначені лише в межах одного запиту.
