“HAVING으로 다 되는데, 굳이 WHERE 왜 씀?”
→ 이거 진짜 많이들 궁금해함. 명확하게 알려줄게.
WHERE을 안 쓰면 SQL이 비효율적이거나 느려짐.
WHERE은 GROUP BY 전에 먼저 필터링됨 → 필터링된 행이 적으면 연산량이 줄어듦.HAVING은 GROUP BY 후에 필터링됨 → 불필요한 그룹핑 먼저 다 하고 나서야 필터링함.📌 예시:
-- 느림
SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING salary > 4000; -- ❌ 집계 후 필터링
-- 빠름
SELECT department, AVG(salary)
FROM employees
WHERE salary > 4000 -- ✅ 먼저 줄여놓고
GROUP BY department;
→ WHERE으로 먼저 걸러두면, GROUP BY 대상이 줄어들어서 훨씬 빠름
WHERE: 원본 데이터 기준 조건HAVING: 그룹별 요약 결과 조건잘 짜인 쿼리는 이 구분이 명확해서 유지보수/가독성도 좋음.
| 조건 종류 | WHERE 가능 | HAVING 가능 |
|---|---|---|
| 컬럼 값 | ✅ | ✅ (하지만 비효율) |
| 집계함수 | ❌ | ✅ |
👉
WHERE은 필터 먼저 해서 성능 올리는 역할,
👉HAVING은 그룹 결과를 나중에 거를 때만 사용!