WHERE과 HAVING의 차이
GROUP BY 관련 문제를 풀다가 WHERE과 HAVING의 사용법이 너무 헷갈려서 정리한다.
WHERE
SELECT * FROM 테이블 WHERE 조건절;
WHERE은 기본적인 조건절로 항상 FROM 뒤에 위치하며 다양한 비교 연산자로 구체적인 조건을 줄 수 있다.
HAVING
SELECT * FROM 테이블 GROUP BY 필드 HAVING 조건절;
항상 GROUP BY 뒤에 위치하며 WHERE 과 마찬가지로 다양한 비교 연산자로 조건을 줄 수 있다.
둘의 차이점은?
둘다 필드에 조건을 줄 수 있다는 것은 동일하나, WHERE은 기본적인 조건절로서 우선적으로 모든 필드에 조건을 둘 수 있고,
HAVING은 GROUP BY로 그룹화 된 후 만들어진 새로운 테이블에 조건을 줄 수 있다.
또한, HAVING에서 조건을 줄 필드는 SELECT에 반드시 명시되어 있어야 한다.
즉, 전체 테이블 자체에서 쿼리를 수행하고 싶다면 where를, 전체 테이블을 그룹화 한뒤,
그 해당 그룹에서 어떠한 조건을 걸어 가져오고 싶다면 having을 사용한다.
둘을 함께 사용할 경우
SELECT * FROM 테이블명 WHERE 조건절 GROUP BY 컬럼 HAVING 조건절;
Comments