- •Мова sql(Structured Query Language) – як універсальний засіб створення баз даних, маніпулювання данними та отримамання потрібної інформації.
- •Умова відбору (ключове слово where)
- •Зрівняння.
- •Ліве з’єднання (left join)
- •Сортування результату (фраза order by)
- •Групування результатів (фраза group by). Агрегатні функціії.
- •Використання фрази group by
- •Використання фрази having
- •Підзапити
- •Ключові слова exists I not exists
- •Модифікація даних (оператор update)
- •Видалення даних з бази(оператор delete).
- •Створенння таблиць (оператор create table).
- •Check (Naukov_stupin in(‘не має’, ‘кадидат’, ‘доктор’))
- •Використання транзакцій.
- •Управління доступом даних
- •Insert – право втавляти в таблицю нові рядки;
- •Надання привілеїв іншим користувачам (оператор grant)
- •Insert - користувач з цим привілеєм може виконувати оператор insert для цієї таблиці;
- •Відміна наданих привілеїв (оператор revoke)
Використання фрази group by
Наведені вище приклади підсумкових даних подібні підсумковим рядкам, які поміщаються в кінці звітів. Правда, досить часто у звітах вимагається формувати проміжні підсумки. Для цієї цілі в операторі SELECT вказується фраза GROUP BY. Стандарт ISO вимагає, щоб фрази SELECT і GROUP BY були тісно пов’язані між собою. При використанні в операторі SELECT фрази GROUP BY фраза SELECT повиненна містити тільки такі типи елементів:
-
імена стовпчиків;
-
агрегатні функції;
-
костанти;
-
вирази, що містять перечислені вище елементи.
Всі імена стовпчиків, які перераховані в списку SELECT’у повинні бути присутніми і у фразі GROUP BY.
На конкретних прикладах пояснимо як потрібно користуватись групуванням. Нагадаємо, що в таблиці table_a міститься інформація про закупки товарів. Якщо уважно подивитись, в цій таблиці є по декілька рядків, у яких значення стовпчика kod (код товару) повторюється, наприклад 1 зустрічається 3 рази. Група рядків, у яких kod=1, матиме вид:
|
Kod |
suma |
data |
|
1 |
100 |
1.1.2002 |
|
1 |
55 |
10.1.2002 |
|
1 |
40 |
15.1.2002 |
Якщо потрібно дізнатись на яку суму закуплено кожного товару, необхідно сформувати такий запит:
SELECT kod,SUM(suma) AS suma_tov
FROM table_a
GROUP BY kod
Результуюча таблиця цього запиту матиме вид:
|
Kod |
Suma_tov |
|
1 |
195 |
|
2 |
239 |
|
3 |
28 |
Отже, оператор SELECT поступає таким чином, спочатку формує групи по значеннях стовпчиків, які перелічені у фразі GROUP BY (в нашому випадку одне поле kod), потім для кожної групи виконує агрегатну функцію і результат заносить у результуючу таблицю. Якби потрібно було крім сум вказати і кількість покупок кожного товару, запит був би таким:
SELECT kod,SUM(suma) AS suma_tov, COUNT(kod) AS kilkist_pokupok
FROM table_a
GROUP BY kod
Результуюча таблиця цього запиту матиме вид:
|
Kod |
Suma_tov |
kilkist_pokupok |
|
1 |
195 |
3 |
|
2 |
239 |
2 |
|
3 |
28 |
1 |
Якщо ж потрібно дізнатись на яку суму закуплено кожного товару до 20.1.2002року, необхідно сформувати такий запит:
SELECT kod,SUM(suma) AS suma_tov
FROM table_a
WHERE data<#20/1/2002#
GROUP BY kod
Результуюча таблиця цього запиту матиме вид:
|
Kod |
Suma_tov |
|
1 |
195 |
|
2 |
150 |
Використання фрази having
Фраза HAVING призначена для сумісного використання з фразою GROUP BY для обмеження відбору груп, які відбираються для результуючої таблиці запиту. Хоч фрази HAVING і WHERE мають схожий синтаксис, їх призначення різне. WHERE призначене для фільтрації рядків, які використовуються в тому числі для групування, фраза HAVING призначена для фільтрації груп, які заносяться в результуючу таблицю. На практиці предикат фрази HAVING повинен містить одну з агрегатних функцій. Наприклад, якщо потрібно дізнатись на яку суму закуплено кожного товару, причому сумарна вартість товару не первищувала б 200 грн.,необхідно сформувати такий запит:
SELECT kod,SUM(suma) AS suma_tov
FROM table_a
GROUP BY kod
HAVING SUM(suma)<=200
Результуюча таблиця цього запиту матиме вид:
|
Kod |
Suma_tov |
|
1 |
195 |
|
3 |
28 |
Якщо потрібно сформувати список товарів (з включенням в результуючу таблицю коду товару, сумарну вартість цього товару і кількість покупок цього товару), середня вартість покупки товару перевищувала би 50, запит мав би вид:
SELECT kod,SUM(suma) AS suma_tov, COUNT(kod) AS kilkist_pokupok
FROM table_a
GROUP BY kod
HAVING AVG(suma)>50
Результуюча таблиця цього запиту матиме вид:
|
Kod |
Suma_tov |
kilkist_pokupok |
|
1 |
195 |
3 |
|
2 |
239 |
2 |
Якщо ж до попереднього запиту додати умову: покупки здійснювались до 20.01.2002 року, запит матиме вид:
SELECT kod,SUM(suma) AS suma_tov, COUNT(kod) AS kilkist_pokupok
FROM table_a
WHERE data<#20/1/2002#
GROUP BY kod
HAVING AVG(suma)>50
Результуюча таблиця цього запиту матиме вид:
|
Kod |
Suma_tov |
kilkist_pokupok |
|
1 |
195 |
3 |
|
2 |
150 |
1 |
