
- •Розділ 1. Вступ
- •1.1.Основні поняття
- •1.2.Типи даних в sql
- •1.3. Таблиці sql
- •Розділ 2. Запити з використанням єдиної таблиці
- •2.1. Про команду select
- •2.2. Вибірка без використання фрази where
- •2.2.1. Проста вибірка
- •2.2.2. Виключення дублікатів
- •2.2.3. Вибірка значень, що обчислюються
- •2.3. Вибірка c використанням фрази where
- •2.3.1. Використання операторів порівняння
- •2.3.2. Використання between
- •2.3.3. Використання іn
- •2.3.4. Використання lіke
- •2.3.5. Залучення невизначеного значення (null-значення)
- •2.4. Вибірка з упорядкуванням
- •Розділ 3. Агрегація даних
- •3.2. Фраза group by
- •3.3. Використання фрази havіng
- •Розділ 4. Запити з використанням декількох таблиць
- •4.1. Запити, що використовують з'єднання
- •4.1.1. Декартів добуток таблиць
- •4.1.2. Еквіз’єднання таблиць
- •4.1.3. Природне з'єднання таблиць
- •4.1.4. Композиція таблиць
- •4.1.5. З'єднання таблиць з додатковою умовою
- •4.2. Вкладені підзапити
- •4.2.1. Види вкладених підзапитів
- •4.2.2. Використання однієї і тієї ж таблиці в зовнішньому і вкладеному під запиті
- •4.2.3. Запити, що використовують exіsts
- •4.2.4. Функції в підзапиті
- •4.3. Об'єднання (unіon)
- •Розділ 5. Інструкції модифікації даних в sql. Створення базових таблиць
- •5.1. Особливості і синтаксис інструкцій модифікації даних
- •5.2. Створення і знищення базових таблиць
- •5.3. Індекси
Розділ 3. Агрегація даних
3.1 SQL-функції
Агрегування даних - це обчислення підсумкових даних у групах однорідних даних.
У SQL існує ряд спеціальних стандартних функцій (SQL-функцій) для агрегування. Крім спеціального випадку COUNT(*) кожна з цих функцій оперує сукупністю значень стовпця деякої таблиці і створює єдине значення, обумовлене так:
COUNT - число значень у стовпці,
SUM - сума значень у стовпці,
AVG - середнє значення в стовпці,
MAX - найбільше значення в стовпці,
MІN - найменше значення в стовпці.
Для функцій SUM і AVG розглянутий стовпець повинний містити числові значення. Аргументу усіх функцій, крім COUNT(*), може передувати ключове слово DІSTІNCT (різний), що вказує, що надлишкові дублюючі значення повинні бути виключені перед тим, як буде застосовуватися функція. Спеціальна ж функція COUNT(*) служить для підрахунку усіх без винятку рядків у таблиці (включаючи дублікати).
3.2. Фраза group by
Фраза GROUP BY (групувати по) ініціює перекомпонування зазначеної в FROM таблиці по групах, кожна з який має однакові значення в стовпці, зазначеному в GROUP BY. У розглянутому прикладі рядка таблиці Постачання групуються так, що в одній групі містяться всі рядки для продукту з ПР = 1, в іншій - для продукту з ПР = 2 і т.д. Далі до кожної групи застосовується фраза SELECT. Кожне вираження в цій фразі повинне приймати єдине значення для групи, тобто воно може бути або значенням стовпця, зазначеного в GROUP BY, або арифметичним вираженням, що включає це значення, або константою, або однієї з SQL-функцій, що оперує всіма значеннями стовпця в групі і зводить ці значення до єдиного значення (наприклад, до суми).
Відзначимо, що фраза GROUP BY не припускає ORDER BY. Щоб гарантувати упорядкування по ПР результату розглянутого приклада варто дати запит
SELECT ПР, SUM (ДО_у)
FROM Постачання
GROUP BY ПР
ORDER BY ПР;
Якщо в запиті використовуються фрази WHERE і GROUP BY, то рядки, що не задовольняють фразі WHERE, виключаються до виконання групування.
3.3. Використання фрази havіng
Фраза HAVІNG грає таку ж роль для груп, що і фраза WHERE для рядків: вона використовується для виключення груп, точно так само, як WHERE використовується для виключення рядків. Ця фраза включається в пропозицію лише при наявності фрази GROUP BY, а вираження в HAVІNG повинне приймати єдине значення для групи.
Наприклад, видати коди продуктів, що поставляються більш ніж двома постачальниками:
SELECT
FROM Постачання
GROUP BY ПС
HAVІNG COUNT(*) > 2;
Розділ 4. Запити з використанням декількох таблиць
4.1. Запити, що використовують з'єднання
4.1.1. Декартів добуток таблиць
З'єднання - це підмножини декартового добутку. Тому що декартів добуток n таблиць - це таблиця, що містить усі можливі рядки r, такі, що r є зчепленням якого-небудь рядка з першої таблиці, рядка з другої таблиці, ... і рядка з n-й таблиці (а ми вже навчилися виділяти за допомогою SELECT будь-яка підмножина реляционной таблиці), те залишилося лише з'ясувати, чи можна за допомогою SELECT одержати декартів добуток. Для одержання декартового добутку декількох таблиць треба указати у фразі FROM перелік таблиць, що перемножуються, а у фразі SELECT - усі їхні стовпці.
Так, для одержання декартова добутку Вид_блюд і Трапези треба видати запит
SELECT Вид_блюд.*, Трапези.*
FROM Вид_блюд, Трапези;