Ключове слово HAVING
Ключове слово HAVING використовується в операторі SELECT разом з ключовим словом GROUP BY, щоб вказати які з груп повинні бути представлені у висновку. Для GROUP BY ключове слово HAVING грає ту ж роль, що і WHERE для ORDER BY. Іншими словами, WHERE задає умови для значень з обраних стовпців, а HAVING задає умови для груп, що створюються за допомогою GROUP BY.
Ключове слово HAVING в операторі SELECT має слідувати за виразом ключового слова GROUP BY і теж передувати ключовим словом ORDER BY, якщо останнє використовується.
Синтаксис оператора SELECT, в якому використовується ключове слово HAVING, наступний.
SELECT столбец1, столбец2
FROM таблица1, таблица2
GROUP BY столбец1, столбец2
ORDER BY столбец1, столбец2
SELECT CITY, AVG (PAY_RATE), AVG (SALARY) FROM EMP_PAY_TMP
CITY AVG (PAY_RATE) AVG (SALARY)
Чому тут виявилася обрана тільки одна рядок? З наступних причин.
Отже, ви тепер знаєте, як групувати результати запиту за допомогою ключового слова GROUP BY. Ключове слово GROUP BY використовується, головним чином, з підсумковими функціями SQL типу SUM, AVG, MAX, MIN і COUNT. Ключове слово GROUP BY подібно ключовим словом ORDER BY в тому сенсі, що обидва вони сортують виведені дані. Ключове слово GROUP BY призначене для сортування даних по групам, але може використовуватися і для звичайної сортування даних, хоча останнім простіше зробити за допомогою ключового слова ORDER BY.
Ключове слово HAVING використовується в операторі SELECT разом з ключовим словом GROUP BY, щоб задати умови відбору для створюваних груп. Ключове слово WHERE використовується для завдання умов відбору для даних стовпців зі списку ключового слова SELECT. На наступному уроці ми розглянемо інші функції, які можна використовувати для зміни представлення даних запиту.
Питання та відповіді
При використанні ключового слова ORDER BY в операторі SELECT обов'язково використовувати ключове слово GROUP BY?
Ні. Ключове слово GROUP BY в операторі SELECT є необов'язковим, але воно може виявитися дуже корисним при використанні ORDER BY.
Що таке групове значення?
Розглянемо стовпець CITY таблиці EMPLOYEE_TBL. Якщо вибрати імена службовців (LAST_NAME) і міста (CITY) і ці дані згрупувати по містах, рядки для однакових назв міст будуть відображені разом.
Щоб згрупувати дані запиту по деякому стовпцю в вираженні ключового слова GROUP BY, чи повинен цей стовпець бути вказано в списку ключового слова SELECT?
Обов'язково. Для того щоб групувати дані за стовпцем, його ім'я повинно бути вказано в списку ключового слова SELECT.
1. Чи будуть працювати наступні оператори SELECT? Якщо немає, то що в них слід виправити?
· SELECT SUM (SALARY), EMP_ID FROM EMPLOYEE_PAY_TBL GROUP BY 1 AND 2;
· SELECT EMP_ID, MAX (SALARY) FROM EMPLOYEE_PAY_TBL GROUP BY SALARY, EMP_ID;
· SELECT EMP_ID, COUNT (SALARY) FROM EMPLOYEE_PAY_TBL ORDER BY EMP_ID GROUP BY SALARY;
2. Чи вірно наступне твердження: "При використанні ключового слова HAVING необхідно використовувати також і ключове слово GROUP BY?"
3. Чи вірно наступне твердження: "Наступний оператор SQL поверне суми зарплат по групам"
SELECT SUM (SALARY) FROM EMPLOYEE_PAY_TBL
4. Чи вірно наступне твердження ' "Вибрані в запиті стовпці повинні бути присутніми в списку ключового слова GROUP BY в тому ж порядку?"
5. Чи вірно наступне твердження: "Вираз ключового слова HAVING говорить GROUP BY про те, які групи слід включити в висновок?"
1. Запишіть оператор SQL, який повертає табельний номер службовця (EMP_ID), ім'я службовця (LAST_NAME) і назва міста (CITY) з таблиці EMPLOYEE_TBL, згруповані за значенням стовпця CITY.
2. Запишіть оператор SQL, який повертає з таблиці EMPLOYEE_TBL назви міст і кількість проживаючих в них службовців. Додайте в оператор ключове слово HAVING, щоб у висновку відобразити тільки ті міста, в яких проживає більше двох службовців з числа тих, інформація про яких є в таблиці.
Об'єднання таблиць в запитах
До сих пір створювані вами запити витягували дані з однієї таблиці. З цього уроку ви дізнаєтеся, як пов'язати таблиці в запиті так, щоб можна було витягти дані з декількох таблиць.
Основними на цьому уроці будуть наступні теми.
- Основні підходи до зв'язування таблиць.
- Різні типи зв'язків.
- Як і коли слід використовувати зв'язування таблиць.
- Ряд практичних прикладів зв'язування таблиць.
- Наслідки неправильного зв'язування таблиць.
- Використання псевдонімів таблиць в запитах.
Відбір даних з декількох таблиць
Можливість відбору даних з декількох таблиць є однією з найбільш корисних можливостей SQL. Без такої можливості втрачає сенс сама ідея реляційної бази даних. Запити до однієї таблиці можуть бути вельми інформативними, але в реальних базах даних найчастіше бувають потрібні дані відразу з декількох таблиць.
В ході уроку по нормалізації вас намагалися переконати в тому, що база даних повинна бути розділена на більш дрібні і краще піддаються управлінню таблиці. Після поділу таблиць на більш дрібні у родинних таблиць виявляються загальні стовпці - ключові поля або просто ключі. Такі ключі і використовуються для зв'язування родинних таблиць.
Зв'язок об'єднує дві або кілька таблиць для того, щоб забезпечити можливість витягти дані відразу з декількох таблиць.
Ви можете здивуватися - навіщо нормалізувати таблиці, якщо, врешті-решт, знову доводиться об'єднувати їх, щоб витягти необхідні дані? Відповідь проста: витягувати всі дані з усіх таблиць відразу доводиться вкрай рідко, тому краще об'єднувати в запиті тільки ті кілька таблиць, які виявляються потрібні в кожному конкретному випадку. Хоча при цьому робота бази даних може трохи сповільнитися, це очевидно компенсується істотним спрощенням роботи з базою даних і управління нею.
Незважаючи на те, що число пропонованих різними реалізаціями SQL способів зв'язування таблиць досить велике, ми розглянемо лише загальні типи зв'язування, до яких відносяться
- зв'язування з рівності (EQU JOIN);
- природне зв'язування (NATURAL JOIN);
- зв'язування за нерівністю (NON-EQU JOIN);
- зовнішнє зв'язування (OUTER JOIN);
- рекурсивне зв'язування (SELF JOIN).