- •Контрольні запитання
- •Контрольні запитання
- •Які головні переваги реляційної моделі?
- •Які види ключів існують і навіщо вони потрібні?
- •Функціональна залежність
- •Найбільш простий вигляд оператора select
- •2. Використання секції where
- •2.1. Порівняння значення стовпчика із константою
- •2.2. Правила виконання однотабличних запитів на вибірку
- •3. Багатотабличні запити
- •3.1. Правила виконання багатотабличних запитів на вибірку
- •4. Використання псевдонімів таблиць
- •Секція order by – визначення порядку сортування
- •Групування записів
- •Правила виконання sql–запиту на вибірку (з врахуванням секції group by)
- •Кілька стовпчиків групування
- •8.3. Обмеження на запити з групуванням
- •8.4. Значення null в стовпчиках групування
- •Правила виконання sql–запиту на вибірку (з врахуванням секції having)
- •9.2. Обмеження на умову відбору груп
- •Значення null і умови відбору груп
- •Секція having без секції group by
- •Складні умови відбору у запитах на вибірку даних Використання логічних виразів
- •Порівняння
- •Перевірка на належність діапазону значень (between…and…)
- •Перевірка на належність множині значень (in)
- •Перевірка на рівність значенню null (is null)
- •Символ пропуску
- •2.1. Режими аутентифікації
- •2.2. Компоненти структури безпеки
- •2.3. Ролі сервера
- •2.4. Ролі баз даних
- •2.5. Ролі програми
- •2.6. Захист даних
- •Шифрування даних
- •Обмеження доступу до файлів sql server
- •3.1. Права доступу
- •3.2. Права на доступ до об'єктів баз даних
- •3.3. Заборона доступу
8.3. Обмеження на запити з групуванням
На запити, в яких використовується групування, накладаються додаткові обмеження. Стовпчики групування повинні бути реальними стовпчиками таблиць, вказаних в секції FROM – це повинні бути фізичні поля таблиць, не можна групувати рядки на основі значення обчислювального виразу.
Крім того, існують обмеження на елементи списку полів секції SELECT. Всі елементи цього списку повинні мати одне значення для кожної групи рядків. Це означає, що елементом списку полів секції SELECT може бути:
-
константа;
-
статистична функція, яка повертає одне значення для всіх рядків, що входять у групу;
-
стовпчик групування, який за означенням має одне і те саме значення у всіх рядках групи;
-
вираз, який складається із вищевказаних елементів.
На практиці в список полів секції SELECT запита з угрупуванням завжди входять стовпчик групування і статистична функція. Якщо не вказано статистичної функції – значить запит можна зробити простішим за допомогою ключового слова DISTINCT без використання секції GROUP BY. Якщо ж не включати в результати запиту стовпчик групування, то не можна визначити, до якої групи належить кожний рядок результатів!
8.4. Значення null в стовпчиках групування
Коли в стовпчику групування міститься значення NULL, виникають додаткові ускладнення: якщо значення стовпчика невідоме, то до якої групи його потрібно віднести?
В секції WHERE при порівнянні двох значень NULL результат має значення NULL (а не TRUE) тобто два значення NULL не вважається однаковими! Якщо таке правило застосовувати в секції GROUP BY, то це приведе до того, що кожний рядок із значенням NULL в стовпчику групування буде занесений в окрему групу, яка складається із одного цього рядка.
На практиці – це дуже незручно. Тому в стандарті SQL визначається, що два значення NULL в секції GROUP BY – співпадають! Тобто, якщо два рядка мають значення NULL в однакових стовпчиках групування та ідентичні значення у всіх інших стовпчиках групування, то вони заносяться в одну групу.
Хоча такий принцип опрацювання значень NULL визначений в стандарті SQL, він реалізований не для всіх діалектів SQL - потрібно перевірити комерційну СУБД.
Нехай
-
People
Name
Hair
Eyes
Cindy
Louise
Harry
Samantha
Joanne
George
Mary
Paula
Kevin
Joel
Susan
Marie
Brown
NULL
NULL
NULL
NULL
Brown
Brown
Brown
Brown
Brown
Blonde
Blonde
Blue
Blue
Blue
NULL
NULL
NULL
NULL
NULL
NULL
Brown
Blue
Blue
(при виконанні таких прикладів на ЕОМ значення NULL – не вводяться, - треба замість них залишати порожні клітинки!)
23). SELECT Hair, Eyes, COUNT (*)
FROM People
GROUP BY Hair, Eyes
результат виконання запиту №23:
-
23)
Hair
Eyes
COUNT (*)
Brown
NULL
NULL
Brown
Brown
Blonde
Blue
Blue
NULL
NULL
Brown
Blue
1
2
2
4
1
2
Лекція №14. Обмеження на запити з групуванням. Секція HAVING – умова відбору груп.
Якщо в результуючому НД потрібно виводити підсумкові значення не для всіх груп, а лише для тих, які задовольняють певній умові, то після секції GROUP BY (перед секцією ORDER BY) вказується секція
Як правило, умова секції HAVING має вигляд:
-
точно так само, як секція WHERE використовується для відбору окремих рядків, секція HAVING використовується для відбору груп рядків.
Формат секції HAVING відповідає формату секції WHERE, за одним важливим винятком.
!в секції WHERE не можна вказувати агрегатних функцій!
Приклади
24) # Яка середня вартість замовлення для кожного працівника із тих, у яких загальна вартість замовлень перевершує 3000?
24). SELECT Pracivnyk, AVG (Vartist)
FROM Zamovlennia
GROUP BY Pracivnyk,
HAVING SUM (Vartist) > 3000
-
можна вказувати різні агрегатні функції для результуючого стовпчика в секції SELECT та для умови відбору груп в секції HAVING.
25). # Вивести загальну кількість купленого товару (в одиницях вимірювання) для всіх покупців, яких мінімальна кількість купленого товару не менша 100 шт.
25). SELECT Pokupets,
SUM (Kilkist)
FROM Vidpusk
GROUP BY Pokupets
HAVING MIN (Kilkist) > =100