- •Модуль 1 Тема 1. Вступ до sql. Синтаксис sql. Типи даних.
- •1. Вступ до sql.
- •Функції sql:
- •Роль sql
- •Переваги sql:
- •Синтаксис sql.
- •Типи даних.
- •1.3.1. Команди
- •1.3.2. Імена
- •1.3.3. Типи даних
- •1.3.4. Константи
- •1.3.4.1. Числові константи
- •1 .3.4.2. Літерні рядки
- •1.3.4.3. Константи дати і часу
- •1.3.4.4. Іменовані константи
- •1.3.5. Вирази
- •1.3.6. Вбудовані функції
- •Тема 2. Створення баз даних
- •Мова визначення даних
- •2. Створення бази даних
- •Тема 3. Створення таблиць
- •1. Команда створення таблиці.
- •2. Заборона значення null за допомогою обмеження not null
- •Тема 4. Вставка стрічок з допомогою оператора insert. Вилучення стрічок з допомогою оператора delete, редагування стрічки з допомогою команди update.
- •Вставка рядків за допомогою команди insert.
- •Додавання рядка за допомогою положення стовпця
- •Додавання рядка за допомогою назв стовпців
- •Додавання рядків з однієї таблиці в іншу
- •Зміна рядків за допомогою команди update.
- •Зміна рядків
- •Видалення рядків за допомогою команди delete
- •Видалення рядків
- •Тема 5. Оператор select
- •Оператор select.
- •Обчислювальні стовпчики. Альтернативне ім’я стовпчику.
- •Порівняння значення стовпчика із константою
- •Правила виконання однотабличних запитів на вибірку
- •Тема 6. Комбінування умов з допомогою операторів and, or, not. Порівняння по шаблону. Порівняння з діапазоном. Сортування стрічок з допомогою речення order by.
- •Порівняння значень виразів має наступну синтаксичну діаграму:
- •Тема 7. Створення псевдонімів. З’єднання таблиці із собою. Вибір даних з кількох таблиць
- •1. Створення псевдонімів.
- •2. З’єднання таблиці із собою.
- •3. Просте з’єднання таблиць (з’єднання за рівністю)
- •Запити з використанням відношення „головна – підлегла” таблиці (предок – нащадок)
- •3. Запити на вибірку до трьох і більше таблиць
- •4. Запити на об’єднання
- •Тема 8. Введення обмежень в базах даних
- •1. Види обмежень в базі даних.
- •Основні принципи роботи з обмеженнями
- •Присвоєння назви обмеженню
- •2. Первинний і унікальний ключі.
- •3. Зовнішні ключі.
- •4. Обмеження check
- •5. Вилучення обмежень.
- •Тема 9. Використання збережуваних процедур в базах даних. Використання генераторів ключів у базах даних в InterBase. Використання тригерів у базах даних.
- •1. Визначення збережуваної процедури.
- •1.2. Цикли й оператори розгалуження.
- •2. Створення генераторів.
- •2.1. Індекси.
- •2.2. Обробка виключень і помилок.
- •3. 1.Означення тригера.
- •3.2. Приклад тригера.
- •3.3. Контекстні змінні.
- •Тема 10. Безпека в базах даних
- •1. Користувач InterBase.
- •3. Організація користувачі у групи за допомогою ролей.
- •4. Права. Роздача прав.
- •5. Анулювання прав.
- •Модуль 2 Тема 11. Оператор exists. Сумування і групування даних.
- •1.1. Оператор exists.
- •1.2. Використання exists з співвіднесеними підзапитами.
- •1.3. Комбінація оператора exists і з’єднання.
- •1.4. Використання not exists.
- •1.5. Використання складних підзаписів з оператором exists.
- •2.1. Агрегатні (статистичні) функції
- •2.2. Правила опрацювання значення null агрегатними функціями:
- •2.3.Опрацювання унікальних записів агрегатними функціями
- •2.4. Агрегатні функції і значення null
- •3.1. Групування записів
- •3.2. Секція having – умова відбору груп
- •3.3. Обмеження на умову відбору груп
- •3.4. Значення null і умова відбору груп
- •3.5. Секція having без секції group by
- •Тема 12. З’єднання з базою даних. Використання збережуваних процедур в Delphi
- •1. З’єднання з сервером
- •2. Використання збережуваних процедур в Delphi.
- •Компонент tStoredProc.
- •Тема 13. Використання механізму транзакцій компонента Database. Керування транзакціями
- •Тема 14. Сервер баз даних InterBase і компоненти InterBase Express.
- •1. Сервер баз даних InterBase і компоненти InterBase Express
- •2. Механізм доступу до даних InterBase Express
- •3. Компонент tibDatabase.
- •Тема 15. Виконання запитів за допомогою компонента tibDataSet
- •1. Вибірка даних з таблиці.
- •2. Редагування даних за допомогою візуальних компонентів.
- •3. Програмне редагування даних.
- •Тема 16. Підпорядковані запити в таблицях Механізм master-detail
- •Література
4. Запити на об’єднання
Деколи буває потрібно об’єднати результати кількох операторів SELECT в одну таблицю. Це забезпечується операцією UNION.
Приклад 1. Вивести список всіх товарів, ціна яких більше 200 грн. або тих, яких було замовлено більше ніж на 3000 грн. за один раз.
Як видно із рисунку, результуючий запис складається із двох частин. Першу частину можна сформулювати так: вивести список всіх товарів, ціна яких більше 200 грн.
SELECT Kod_Vyrobn, Kod_Tovaru
FROM Tovary
WHERE Cina > 200
Kod_Vyrobn |
Kod_Tovaru |
101 204 101 204 |
4100 2844 4101 2845 |
Другу частину запиту можна сформулювати так: вивести список всіх товарів, яких було замовлено більш ніж на 3000 грн. за один раз.
SELECT DISTINCT Vyrobnyk, Tovar
FROM Zamovlennia
WHERE Vartist > 3000
Vyrobnyk |
Tovar |
204 204 355 |
2844 2845 7755 |
Операція UNION створює одну таблицю результатів запиту, в якій містяться рядки результатів як першої, так і другої частин.
SELECT Kod_Vyrobn, Kod_Tovaru
FROM Tovary
WHERE Cina > 200
UNION
SELECT DISTINCT Vyrobnyk, Tovar
FROM Zamovlennia
WHERE Vartist > 3000
101 204 101 204 355 |
4100 2844 4101 2845 7755 |
Зауваження:
Імена стовпчиків в двох запитах, які об’єднуються за допомогою операції UNION не обов’язково повинні співпадати:
1-ша таблиця: Kod_Vyrobnyka, Kod_Tovaru
2-га таблиця: Vyrobnyk, Tovar.
Оскільки стовпчики в двох таблицях можуть мати різні імена, - то стовпчики результатів запиту на об’єднання, що повертаються операцією UNION,- безіменні.
Щоб таблиці результатів запитів можна було об’єднати за допомогою операції UNION треба, щоб виконувалися такі умови:
-
результуючі таблиці повинні мати однакову кількість стовпчиків;
-
тип даних кожного стовпчика першої таблиці повинен точно співпадати із типом даних відповідного стовпчика другої таблиці. Якщо це не так, то необхідно виконати приведення типу за допомогою функції CAST;
-
жодна із двох таблиць не може бути відсортована за допомогою секції ORDER BY, але об’єднані результати запиту можна буде відсортувати.
Стандарт SQL1 накладає такі обмеження: ті запити, які допускається використовувати як операнди об’єднання UNION в SELECT повинні мати лише імена стовпчиків або вказівку виводити всі стовпчики і забороняється використовувати вираз.
Дуже багато СУБД забороняють використовувати в таких операторах SELECT секції GROUP BY та HAVING, крім того, є такі СУБД (SQL Server), які взагалі не підтримують самої операції UNION.
При об’єднанні існує велика ймовірність того, що таблиці які об’єднуються будуть мати рядки, що повторюються.
За замовчуванням операція UNION відкидає рядки дублікати, тому в результуючій таблиці буде лише по одному рядку із цих товарів (попередній приклад).
Якщо в результуючій таблиці необхідно залишити всі рядки-дублікати, то потрібно виконати операцію UNION ALL.
Секцію ORDER BY не можна використовувати в жодній вибірці, яка входить до складу запиту на об’єднання, але результат об’єднання можна відсортувати за допомогою секції ORDER BY, яка вказується тільки після останнього оператора SELECT, причому в секції ORDER BY потрібно вказувати номери стовпчиків.
Приклад 2.
SELECT *
FROM A
UNION
(SELECT *
FROM B
UNION
SELECT *
FROM C)
Порядок виконання операції UNION, якщо вони однаково опрацьовують рядки-дублікати, немає значення:
(A UNION B) UNION C
A UNION (B UNION C)
(A UNION C) UNION B
Якщо в одному виразі комбінуються операції UNION та UNION ALL, то порядок виконання цих операцій має суттєве значення.
Приклад 3. A UNION ALL B UNION C
1) A UNION ALL (B UNION C)
Результат: 6 рядків з В і С плюс 4 рядки з А і (В і С), загалом дорівнює 10 рядків.
2) (A UNION ALL B) UNION C
Результат: 7 рядків.
Виконання запитів на об’єднання здійснюється за наступною схемою:
-
Якщо це запит на об’єднання кількох інструкцій SELECT, то для кожної з цих інструкцій виконати дії 27 і отримати окрему таблицю результатів.
-
Сформувати декартовий добуток таблиць вказаних у секції FROM.
-
Якщо є секції WHERE, то застосувати умову відбору до кожного рядка таблиці результатів декартового добутку. Залишаться лише ті рядки, для яких умова має значення TRUE, а рядки, для яких умова має значення FALSE або NULL, відкидаються. Якщо в секції WHERE міститься підлеглий запит, то він виконується для кожного рядка, що перевіряється в даний момент.
-
Якщо є секція GROUP BY, то розділити рядки, які залишилися, на групи так, щоб в кожній групі рядки мали однакові значення в усіх стовпчиках групування.
-
Якщо є секція HAVING, то застосувати задану в ній умову відбору до кожної групи. Залишаться лише ті групи, для яких умова має значення TRUE. Якщо ж умова має значення FALSE або NULL, то така група відкидається. Якщо секція HAVING містить підлеглий запит, то він виконується для кожної групи, що перевіряється в даний момент.
-
Обчислити значення кожного елемента списку SELECT і створити один рядок таблиці результатів запиту. Якщо є групування, то кожна група буде представлена одним результуючим рядком. Якщо групування немає, то результуючий рядок утвориться в результаті одного рядка в результаті третьої дії.
-
Якщо є слово DISTINCT, то вилучити всі рядки-дублікати.
-
Якщо це запит на об’єднання, то об’єднати результати окремих інструкцій SELECT в одну таблицю. При цьому, якщо використовується UNION то відкидаються рядки-дублікати, якщо ж використовується операція UNION ALL, то рядки-дублікати залишаються.
-
Якщо є секція ORDER BY, то відсортувати результати запиту.
Контрольні питання:
-
Що таке псевдонім таблиці, для чого його використовують?
-
Для чого створюють з’єднання таблиці з собою?
-
Що називається з’єднанням таблиць?
-
В якій секції вказується з’єднання?
-
Який тип відношення створюється при зв’язуванні первинного ключа із зовнішнім ключем?
-
Що таке - з’єднання?
-
Що створюється операцією UNION?