В чем принципиальное отличие WHERE и HAVING в SQL-запросах
Краткий ответ
Клауза WHERE фильтрует отдельные строки до этапа группировки, а HAVING применяется для отбора групп после выполнения агрегатных функций.
Развёрнуто
Краткий ответ
Клауза WHERE ограничивает набор данных на уровне отдельных записей до группировки, тогда как HAVING фильтрует уже сформированные группы после агрегации.
Как это работает
WHERE — это фильтр, который работает с исходными строками таблицы и не может использовать агрегатные функции, так как применяется до этапа группировки. В свою очередь, HAVING используется для ограничения результатов после применения GROUP BY, позволяя фильтровать группы по значениям агрегатных функций, таких как SUM(), COUNT(), AVG().
| Особенность | WHERE | HAVING |
|---|---|---|
| Область применения | Фильтрация отдельных строк | Фильтрация сгруппированных данных |
| Использование агрегатных функций | Нет | Да |
| Порядок выполнения | До группировки | После группировки |
Пример
SELECT department, COUNT(*) AS employees_count
FROM employees
WHERE salary > 50000
GROUP BY department
HAVING COUNT(*) > 10;
В этом примере WHERE отбирает сотрудников с зарплатой выше 50000 до группировки, а HAVING оставляет только те отделы, в которых больше 10 таких сотрудников.
Что важно знать на собеседовании
WHEREфильтрует исходные строки,HAVING— агрегированные группы.- Нельзя использовать агрегатные функции в
WHERE. HAVINGчасто идет вместе сGROUP BY, но может использоваться и без него.- Понимание порядка выполнения SQL-запроса помогает грамотно применять обе клаузы.
Тема: SQL и базы данных | Уровень: junior