В чем разница между WHERE и HAVING ?

Спросят с вероятностью 17%



Различие между WHERE и HAVING заключается в их использовании и моменте применения при обработке запросов. Эти два ключевых слова играют важную роль в фильтрации записей, но они применяются в разных этапах запроса и для разных целей.



Ключевое слово WHERE



Используется для фильтрации строк перед тем, как будут выполнены какие-либо группировки (GROUP BY) или агрегации (SUM, COUNT и т.д.).

Цель: Отфильтровать записи на основе конкретных условий, которые должны быть выполнены отдельными строками в исходной таблице.

    SELECT employee_id, name

FROM employees

WHERE department = 'Sales';



В этом примере запрос возвращает всех сотрудников отдела продаж. Фильтрация происходит до того, как данные попадут в результаты запроса.



Ключевое слово HAVING




Используется для фильтрации групп после того, как они были сформированы оператором GROUP BY.

Цель: Отфильтровать группы на основе агрегатных функций или условий, которые не могут быть применены до выполнения группировки.

    SELECT department, COUNT(*)

FROM employees

GROUP BY department

HAVING COUNT(*) > 10;



В этом примере запрос считает количество сотрудников в каждом отделе и возвращает только те отделы, где число сотрудников превышает 10. Здесь фильтрация происходит после группировки результатов.



Важные различия



1⃣Момент применения: WHERE фильтрует строки до любой агрегации, в то время как HAVING применяется после группировки данных.

2⃣Использование с агрегатными функциями: WHERE не может использоваться с агрегатными функциями, потому что агрегация ещё не произошла. HAVING специально предназначен для работы с агрегатными функциями.

3⃣Логический порядок выполнения: В процессе выполнения SQL-запроса WHERE выполняется до GROUP BY, а HAVING — после.



WHERE и HAVING выполняют разные функции, и их использование зависит от требуемой логики фильтрации. WHERE идеально подходит для фильтрации отдельных строк, а HAVING — для фильтрации групп после их формирования. Это позволяет эффективно управлять выводом данных, особенно когда необходимо работать с суммированными или группированными результатами.



👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 349 вопроса на Golang разработчика. Ставь 👍 если нравится контент



🔐 База собесов | 🔐 База тестовых