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