- •Модуль 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.
В реляційній БД вся інформація зберігається у вигляді явних значень у стовпчиках, тому всі можливі відношення між таблицями можна сформувати, співставляючи вміст відповідних стовпчиків.
Таким чином, з’єднання – це потужний (і єдиний!) спосіб виявлення відношень, що існують між даними.
Оператор SELECT для багатотабличного запиту повинен містити умову відбору, яка визначає зв’язок між стовпчиками:
2). Вивести номер і вартість замовлення, а також прізвище клієнта, який зробив це замовлення і величину наданого цьому клієнтові кредиту.
2). SELECT No_Zamovl, Vartist, Prizv, Credit
FROM Zamovlennia,Clients
WHERE Client = Kod_Clienta
-
тут є особливості:
І. Секція FROM містить дві таблиці.
ІІ. В умові відбору Client = Kod_Clienta порівнюються стовпчики із двох таблиць. Такі стовпчики називаються зв’язаними.
Зауважимо, що в операторі SELECT ніде не сказано як саме повинен виконуватися запит. Там немає вказівок типу „почніть з замовлень” або „почніть з клієнтів”. Замість цього в запиті сказано що ми повинні отримати в результаті, а спосіб отримання в результатів – залишається за СУБД.
Така умова відбору зменшує кількість пар рядків таблиці результатів: „Включити в таблицю результатів запиту тільки ті пари рядків, для яких ідентифікатор клієнта (Client) в таблиці Zamovlennia дорівнює ідентифікатору клієнта (Kod_Clienta) в таблиці Clients”.
Запити з використанням відношення „головна – підлегла” таблиці (предок – нащадок)
Із всіх багатотабличних запитів на практиці найбільш поширені запити до двох таблиць, які зв’язані відношенням „головна – підлегла”. Запит про замовлення і клієнтів – саме такий.
У кожного замовлення (нащадок) є відповідний клієнт (предок), і кожний клієнт (предок) може мати багато замовлень (нащадків). Таблиці, із яких беруться рядки для формування пари рядків результатів запиту, зв’язані відношенням „головна (Clients) – підлегла (Zamovlennia)”.
В реляційній базі даних первинні (головні) і зовнішні ключі створюють відношення предок /нащадок .
-
Clients
Kod_Clienta
..
..
..
Zamovlennia |
||||
.. |
.. |
Client |
.. |
.. |
|
|
|
|
|
Таблиця, яка містить зовнішній ключ – це нащадок (підлегла таблиця), таблиця, у якій відповідний стовпчик є первинним ключем, - це предок (головна таблиця). Щоб в запиті використати відношення предок/нащадок, потрібно задати умову відбору, у якій первинний ключ порівнюється із зовнішнім ключем:
2). SELECT No_Zamovl, Vartist, Prizv, Credit
FROM Zamovlennia,Clients
WHERE Client = Kod_Clienta
зовнішній ключ первинний ключ
в таблиці Zamovlennia таблиці Clients
(для зв’язку із таблицею Clients)
В SQL зовсім не вимагається, щоб зв’язані стовпчики обов’язково включалися в результати багатотабличного запиту. На практиці вони, як правило, і не включаються – як не було в нашому прикладі.
Це пов’язано з тим, що первинний і зовнішній ключі найчастіше являють собою ідентифікатори, які людині важко запам’ятати, тоді як відповідні назви (міста, організації, прізвища, посади тощо) запам’ятати набагато легше.
Тому цілком зрозуміло, що в секції WHERE для з’єднання двох таблиць використовуються ідентифікатори, а в секції SELECT для створення результуючих стовпчиків – більш зручні для сприйняття назви.
Умова для відбору рядків
В багатотабличному запиті можна комбінувати умову відбору, в якій визначаються зв’язані стовпчики, з іншими умовами, щоб ще більше звузити результати запиту.
3). Нехай потрібно повторити попередній запит, але включити в нього лише замовлення тих клієнтів, чий кредит перевищує 85 грн.
3). SELECT No_Zamovl, Vartist
Prizv, Credit
FROM Zamovlennia, Clients
WHERE Client = Kod_Clienta
AND Credit > 85
-
застосування додаткової умови відбору зменшує кількість рядків в таблиці результатів запиту.
Перша умова (Client = Kod_Clienta) відбирає із таблиці Zamovlennia і Clients ті пари рядків, які зв’язані відношенням предок/нащадок; друга умова приводить до подальшого відбору лише тих пар рядків, де кредит перевищує 85 грн.
Кілька зв’язаних стовпчиків
Розглянемо приклад:
-
Tovary
Kod_Tovaru
Kod_Vyrobnyka
…
Cina
…
Zamovlennia |
||||||
N_Z |
… |
Tovar |
Vyrobnyk |
… |
Kilkist |
… |
|
|
|
|
|
|
|
Стовпчики Tovar і Vyrobnyk в таблиці Zamovlennia утворюють зовнішній ключ для зв’язку із таблицею Tovary і зв’язані із її стовпчиками Kod_Tovaru і Kod_Vyrobnyka відповідно.
Щоб сполучити таблиці на основі такого відношення предок/нащадок, необхідно задати обидві пари зв’язаних стовпчиків.
4). Вивести номери замовлень на товари, а також відповідних товарів.
4). SELECT No_Zamovl, Nazva
FROM Zamovlennia, Tovary
WHERE Tovar = Kod_Tovaru
AND Vyrobnyk = Kod_Vyrobnyka
Умова відбору в цьому запиті визначає, що зв’язаними парами рядків таблиць Zamovlennia і Tovary будуть ті, в яких пари зв’язаних стовпчиків містять одні і ті самі значення.
З’єднання за допомогою кількох стовпчиків, як правило, використовуються в запитах із складеними зовнішніми ключами, - як в наведеному прикладі.