- •Модуль 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
- •Література
3. Запити на вибірку до трьох і більше таблиць
SQL дозволяє з’єднувати дані із трьох і більше таблиць, використовуючи ту саму методику, що і для з’єднання даних із двох таблиць.
Ось приклад з’єднання даних із трьох таблиць:
5). Вивести номер замовлення, прізвище клієнта, який його зробив, назву і ціну замовленого товару, для замовлень вартістю понад 100 грн.
5). SELECT No_Zamovl, Prizv, Nazva, Cina
FROM Zamovlennia, Clients, Tovary
WHERE Client = Kod_Clienta
AND Tovar = Kod_Tovaru
AND Vyrobnyk = Kod_Vyrobnyka
AND Cina >100
Як видно із нарисованої схеми, в цьому запиті використовуються два зовнішні ключі таблиці Zamovlennia: в ній стовпчик Client – це зовнішній ключ для таблиці Clients, він зв’язує кожне замовлення з клієнтом, який його зробив.
Стовпчики (Tovar, Vyrobnyk) – це складений зовнішній ключ для таблиці Tovary, вони зв’язують замовлення із замовленим товаром.
Інші з’єднання таблиць за рівністю
Переважна більшість багатотабличних запитів основана на відношеннях предок/нащадок, але в SQL це зовсім не обов’язково; тобто, не вимагається, щоб зв’язані стовпчики являли собою пару: „зовнішній ключ – первинний ключ” у зв’язку „підлегла – головна таблиці”.
Будь-які два стовпчика із двох таблиць можуть бути зв’язані, якщо вони мають сумісні типи даних.
6). Вивести всі замовлення, отримані в той день, коли на роботу був прийнятий будь-який новий працівник.
6). SELECT Zamovlennia . * , Prizv
FROM Zamovlennia, Pracivnyky
WHERE Data_Otrym = Data_Pryjomu
-
у цьому запиті зв’язаними є стовпчик Data_Otrym таблиці Zamovlennia та стовпчик Data_Pryjomu таблиці Pracivnyky:
Data_Otrym = Data_Pryjomu
Ці стовпчики не входять ні у зовнішній ключ, ні у первинний ключ; та й взагалі, відношення між рядками у цих парах – в достатній мірі дивне: спільне у цих замовленнях і працівниках лише те, що вони з’явилися у фірмі один і той самий день.
Незважаючи на це, СУБД з готовністю сполучає таблиці так, як це визначено в запиті.
Зв’язані стовпчики, подібні до тих, що наведені в нашому прикладі, створюють між таблицями відношення „багато – до – багатьох” (N : M) :може поступити багато замовлень в день прийому на роботу якогось працівника; також – в день отримання якогось замовлення на роботу може бути прийнято декілька працівників.
Відношення „багато – до – багатьох” відрізняється від відношення „один – до – багатьох”, яке створюється коли в якості зв’язаних стовпчиків використовується первинний і зовнішній ключі.
Більш типова ситуація, коли в таблиці Zamovlennia реєструється працівник, який прийняв це замовлення:
Підведемо підсумки:
1) в з’єднанні, створеному за допомогою зв’язування головного (первинного) ключа із зовнішнім ключем завжди існує відношення „один – до – багатьох” (предок/нащадок).
2) в інших з’єднаннях також можуть існувати відношення „один – до – багатьох”, якщо по крайній мірі в одній таблиці зв’язаний стовпчик містить унікальні значення в усіх рядках (якщо в обидвох таблицях зв’язані стовпчики містять в усіх рядках унікальні значення - то в з’єднанні буде відношення „ один – до – одного” ).
3) в загальному випадку в з’єднаннях, створених на основі довільних зв’язаних стовпчиків, існує відношення „багато – до – багатьох”.
Зауважимо, що відмінності цих трьох випадків не впливають на форму запису оператора SELECT, який визначає з’єднання. З’єднання всіх трьох видів записуються одним і тим самим способом: в секції WHERE записується порівняння зв’язаних стовпчиків.
- з’єднання. З’єднання таблиць за нерівністю
(тета) - з’єднання відношення А по атрибуту Х з відношенням В по атрибуту Y – це результат обчислення виразу.
(A B)
WHERE X Y
де A B – декартовий добуток відношень А і В.
X Y – результат порівняння значень атрибутів Х та Y, який може приймати значення TRUE, FALSE, NULL.
- одна із операцій відношення: =, <>, >, >=, <, <=
Іншими словами, - з’єднання таблиці А по стовпчику Х з таблицею В по стовпчику Y, - це результат вибірки з декартового добутку A B тих типів рядків, для яких умова
X Y
має значення TRUE.
З’єднання за рівністю – це один із частинних випадків - сполучень. Хоча серед всіх з’єднань найбільш поширеними є з’єднання за рівністю, але інколи використовуються з’єднання таблиць за допомогою інших операцій порівняння.
7). Вивести дані про працівників (та відповідні філії), які перевищили план продаж по своїй філії.
- фірма має в різних містах свої філії, в кожній встановлено свій план продаж на одного працівника. Потрібно преміювати кращих працівників
7). SELECT Prizv,Misto,(Prodav - Plan_Prod) AS Perev
FROM Pracivnyky,Filii
WHERE Filia = Kod_Filii
AND Prodav > Plan_Prod
В цьому прикладі використовується > - з’єднання таблиць Pracivnyky та Filii – відбираються лише ті рядки, для яких умова Prodav > Plan_Prod
набуває значення TRUE.
Додаткова умова Filia = Kod_Filii
потрібна для того, щоб вибрати працівників, які працюють в даній філії – тобто, в результуючій таблиці в кожній парі рядків рядок з таблиці Pracivnyky буде представляти працівника, який працює у філії, представленій рядком з таблиці Filii.
З’єднання за нерівністю поширені відносно мало, але вони корисні в системах підтримки прийняття рішень та інших системах, які досліджують більш складні взаємозв’язки в базі даних.