К списку
SQL и базы данныхJuniorСкрининг с HR

В чем принципиальное отличие 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