- •4.1. Історія мови sql та огляд її можливостей
- •4.2. Засоби пошуку даних
- •4.2.1. Основні конструкції мови, призначені для вибирання даних
- •4.2.2. Вирази, умови та оператори
- •4.2.3. Вибирання з кількох таблиць
- •4.2.4. Використання агрегатних функцій
- •4.2.5. Фраза group by. Групування таблиці за рядками
- •4.2.6. Фраза having. Умова вибирання для груп рядків
- •4.2.8. Порядок обчислення запитів
- •4.2.9. Підзапити
- •4.2.7. Фраза order by. Впорядкування рядків
- •4.2.10. Використання предикатів any, all, exists та in
- •4.2.11. Використання теоретико-множинних операторів
- •4.2.12. Запити, в яких реалізується квантор загальності
- •4.2.13, Використання невизначених значень
- •4.3. Засоби маніпулювання даними
- •4.3.1. Додавання рядків до таблиці. Оператор insert
- •4.3.2. Оновлення даних. Оператор update
- •4.3.3. Видалення рядків таблиці. Оператор delete
- •4.4. Операції над схемою бази даних
- •4.4.1. Створення бази даних. Оператор create database
- •4.4.2. Створення таблиці. Оператор create table
- •4.5.2. Використання індексів
- •4.6. Транзакції
- •4.6.1. Початок і завершення транзакції
- •4.6.2. Скасування транзакції. Точки збереження
- •4.7. Тригери
- •4.8. Додаткові можливості
4.2.5. Фраза group by. Групування таблиці за рядками
Фраза GROUP BY дає змогу поділити множину рядків, одержаних після застосування фрази WHERE (тобто після фільтрації), на групи за ознакою рівності значень в одному чи кількох стовпцях. У цьому випадку агрегатні функції, що використовуються у фразі SELECT, діють не в усьому кінцевому реляційному відношенні, а лише в межах кожної групи. За наявності фрази GROUP BY кожний вираз у списку фрази SELECT повинен набувати єдиного значення для всієї групи, тобто він може бути:
константою;
агрегатною функцією;
таким самим виразом, що й у фразі GROUP BY;
виразом, що побудований з перелічених вище виразів.
Розглянемо кілька прикладів.
Запит 4.19
Запит 4.15 —____
Визначити кількість студентів на кожній кафедрі факультету інформатики.
SELECT КАФЕДРА.Назва, SUMCrPYRA.Кількість) Number_Of_Students_In_The_Departments FROM ФАКУЛЬТЕТ. КАФЕДРА. ГРУПА
WHERE ФАКУЛЬТЕТ.#F = КАФЕДРА.#F AND
КАФЕДРА.#D = ГРУПА.#D AND
ФАКУЛЬТЕТ.Назва = "інформатики" GROUP BY КАФЕДРА.Назва
Запит 4.16
Визначити кількість викладачів на кожному факультеті.
SELECT ФАКУЛЬТЕТ.Назва. C0UNT(*) Number_Of_Teachers_In_The_Faculty.
SUM (ГРУПА.Кількість) Number_Of_Students_In_The_Departments FROM ФАКУЛЬТЕТ. КАФЕДРА, ВИКЛАДАЧ
WHERE ФАКУЛЬТЕТ.#F = КАФЕДРА.#F AND
КАФЕДРА.#D = ВИКЛАДАЧ.#D GROUP BY ФАКУЛЬТЕТ.Назва
Запит 4.17
Для кожного викладача визначити кількість дисциплін, які він читає.
SELECT ВИКЛАДАЧ.Прізвище, COUNT(DISTINCT #S) Number_Of_Subjects
FROM ВИКЛАДАЧ. ЛЕКЦІЯ
WHERE ВИКЛАДАЧ.#Т = ЛЕКЦІЯ.#Т
GROUP BY ВИКЛАДАЧ.Прізвище
Запит 4.18
Отримати фонди факультетів з таблиці ФАКУЛЬТЕТ, а також обчислити їх як суми фондів кафедр.
SELECT ФАКУЛЬТЕТ.Назва. ФАКУЛЬТЕТ.Фонд. SUM(КАФЕДРА.Фонд) Departmentsjunds
FROM ФАКУЛЬТЕТ. КАФЕДРА
WHERE ФАКУЛЬТЕТ.#F = КАФЕДРА.#F
GROUP BY ФАКУЛЬТЕТ.Назва. ФАКУЛЬТЕТ.Фонд
4.2.6. Фраза having. Умова вибирання для груп рядків
Фраза HAVING має таке ж значення для груп, що й WHERE для рядків усієї таблиці: вона дає змогу задавати умови для груп рядків, сформованих фразою GROUP BY. Фраза HAVING може використовуватися лише за наявності фрази GROUP BY; вирази в HAVING повинні набувати єдиного значення для групи. В умовах, що формулюються у фразі HAVING, можна використовувати агрегатні функції, які діють у межах створюваних груп, а також стовпці, за якими виконується групування. Розглянемо приклади.
Визначити факультети, де власний фонд перевищує сумарний фонд усіх кафедр.
SELECT ФАКУЛЬТЕТ.Назва FROM ФАКУЛЬТЕТ. КАФЕДРА
WHERE ФАКУЛЬТЕТ.#F = КАФЕДРА.#F GROUP BY ФАКУЛЬТЕТ.Назва. ФАКУЛЬТЕТ.Фонд HAVING ФАКУЛЬТЕТ.Фонд > SUM(КАФЕДРА.Фонд)
Запит 4.20
Визначити факультети, в яких власний фонд перевищує сумарний фонд усіх кафедр на 2000
SELECT ФАКУЛЬТЕТ.Назва
FROM ФАКУЛЬТЕТ. КАФЕДРА
WHERE ФАКУЛЬТЕТ.#F = КАФЕДРА.#F
GROUP BY ФАКУЛЬТЕТ.Назва, ФАКУЛЬТЕТ.Фонд
HAVING (ФАКУЛЬТЕТ.Фонд - БиМСКАФЕДРА.Фонд)) > 2000
