- •Модуль 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.2. Секція having – умова відбору груп
Якщо в результуючому наборі даних потрібно виводити підсумкові значення не для всіх груп, а лише для тих, які задовольняють певній умові, то після секції GROUP BY перед секцією ORDER BY вказується секція HAVING.
![]()
Загальний вигляд оператора SELECT описується так:

Умова відбору груп секції HAVING має вигляд:
![]()
Подібно до того, як секція WHERE використовується для відбору окремих рядків, так і секція HAVING використовується для відбору груп. Формат секції HAVING такий як і в секції WHERE, за одним дуже важливим винятком: в секції WHERE не можна вказувати агрегатних функцій.
Порядок виконання секцій в операторі SELECT такий:
-
FROM.
-
WHERE.
-
GROUP BY.
-
HAVING.
-
SELECT.
-
ORDER BY.
Приклад 16. Яка середня вартість замовлення для кожного працівника із тих працівників, у яких загальна вартість замовлень перевищує 3000.
SELECT Pracivnyk, AVG (Vartist)
FROM Zamovlennia
GROUP BY Pracivnyk
HAVING SUM (Vartist) > 3000
Можна вказувати різні агрегатні функції у секції SELECT і у секції HAVING.
Приклад 17. Вивести загальну кількість купленого товару (в одиницях вимірювання) для всіх тих покупців, у яких мінімальна кількість купленого товару не менше ніж 100.
SELECT Pokupets, SUM (Kilkist)
FROM Vidpusk
GROUP BY Pokupets
HAVING MIN (Kilkist) > = 100
Правила виконання SQL-запиту на вибірку із врахуванням секції HAVING:
-
FROM.
-
WHERE.
-
GROUP BY.
-
HAVING.
-
SELECT.
-
DOSTINCT.
-
ORDER BY.
Приклад 18. Вивести ціну, кількість наявних на складі товарів та загальну кількість замовлених одиниць для кожної назви товару, якщо для нього загальна кількість замовлених одиниць більша, ніж 75% від кількості наявних на складі товарів.
SELECT T.Nazva, T.Cina, T.Nay_Kilkist, SUM (Z.Kilkist)
FROM Tovary T, Zamovlennia Z
WHERE Z.Kod_Tovaru = T.Kod_Tovaru AND
Z.Kod_Vyrobn = T.Kod_Vyrobn
GROUP BY T.Kod_Vyrobn, T.Kod_Tovaru,
T.Nazva, T.Cina, T.Nay_Kilkist
HAVING SUM (Z.Kilkist) > 0.75 * T.Nay_Kilkist
ORDER BY T.Nay_Kilkist DESC
3.3. Обмеження на умову відбору груп
Секція HAVING використовується для того, щоб відбирати групи рядків, тому умова відбору секції HAVING застосовується не до окремих рядків, а до групи в цілому. Це означає, що в умову відбору секції HAVING може входити 1) константа; 2) агрегатна функція, яка повертає одне значення для всіх рядків, що входять у групу; 3) стовпчик групування, який за означенням має одне й те саме значення в усіх рядках групи; 4) вираз, який складається із всіх вищевказаних елементів.
На практиці умова відбору секції HAVING завжди містить як мінімум одну агрегатну функцію. Якщо це не так, то таку умову можна і навіть буде краще перемістити у секцію WHERE.
3.4. Значення null і умова відбору груп
Як і у секції WHERE умова відбору в секції HAVING може дати один з наступних результатів: якщо умова набуває значення TRUE, то така група рядків залишається і для неї генерується один єдиний рядок таблиці результатів запиту; якщо ж умова отримує значення FALSE або NULL, то така група рядків ігнорується і для неї жодний рядок таблиці результатів не створюється.
Правила опрацювання значень NULL в умовах відбору секції HAVING такі самі, що і для секції WHERE.
