SQL представляє собою стандарт мови для роботи з реляційними базами даних. Він має у своєму арсеналі безліч потужних інструментів маніпулювання даними, що зберігаються у вигляді таблиць.
Безсумнівно, можливість групувати дані при їх вибірці за певною ознакою є одним з таких інструментів. SQL-Оператор HAVING поряд з оператором WHERE дозволяє визначати умови вибірки вже згрупованих певним чином даних.
Параметр HAVING SQL: опис
Насамперед варто відзначити, що даний параметр є необов'язковим і застосовується виключно у зв'язку з параметром GROUP BY. Як ви пам'ятаєте, GROUP BY застосовується тоді, коли в SELECT використовуються агрегатні функції, і результати їх обчислень потрібно отримати по певним групам. Якщо WHERE дозволяє задати умови вибірки перед тим, як дані будуть згруповані, то HAVING містить умови, що стосуються даних вже безпосередньо в самих групах. Для кращого розуміння давайте розберемо приклад зі схемою, представлений на малюнку нижче.
Це чудовий приклад, який дає HAVING SQL опис. Дана таблиця з переліком найменувань продукції, компаніями, що випускають їх і деякими іншими полями. У запиті у верхньому правому куті ми намагаємося отримати інформацію про те, яка кількість найменувань продукції, що випускає кожна компанія, при цьому результат ми хочемо вивести тільки ті компанії, які випускають більше 2 найменувань. Параметр GROUP BY сформував три групи, відповідні назв компаній, для кожної з яких пораховано кількість продукції (рядків). Але параметр HAVING своїм умовою відсік одну групу з результуючої вибірки, оскільки вона не задовольняла умові. В результаті ми отримуємо дві групи, відповідні компаніям з кількістю продукції 5 і 3.
Може виникнути питання про те, навіщо використовувати HAVING, якщо в SQL є WHERE. Якщо б ми використовували WHERE, то він би дивився на загальну кількість рядків у таблиці, а не за групами, і умова не мало б сенсу в даному випадку. Однак досить часто вони прекрасно уживаються в одному запиті.
На прикладі вище, ми можемо бачити, як спочатку відбувається відбір даних по іменах працівників, зазначених у пункті WHERE, а потім згрупований GROUP BY результат проходить додаткову перевірку за сумою зарплати для кожного працівника.
Параметр SQL HAVING: приклади, синтаксис
Розглянемо деякі особливості синтаксису HAVING SQL. Опис даного параметра досить просте. По-перше, як уже зазначалося, він використовується виключно в зв'язці з параметром GROUP BY і вказується відразу ж після нього і перед ORDER BY, якщо такий є в запиті. Воно і зрозуміло, так як HAVING визначає умови для згрупованих даних. По-друге, умови цього параметра можна використовувати тільки агрегатні функції і поля, зазначені у пункті GROUP BY. Всі умови в даному пункті зазначаються точно таким же чином, як і у випадку з WHERE.
Висновок
Як бачите, нічого складного в цьому операторі немає. Семантично він використовується так само, як і WHERE. Важливо зрозуміти те, що WHERE використовують щодо всіх своїх даних, а HAVING - тільки по відношенню до груп, визначених у пункті GROUP BY. Ми представили вичерпне для HAVING SQL опис, якого достатньо для впевненої роботи з ним.