YS's develop story
SQL Having, Where 차이 본문
SQL Having, Where 차이
위와 같이 instructor라는 테이블이 있습니다.
SELECT dept_name, AVG(salary) AS avg_salary
FROM instructor
GROUP BY dept_name
HAVING AVG(salary) > 42000;
집계 함수와 GROUP BY 키워드를 활용해 위와 같은 쿼리문으로
dept_name별로 평균 연봉을 출력하도록 할 수 있습니다.
하지만 여기서 궁금한 게 생겼습니다.
HAVING이 아닌 WHERE키워드로 위와 똑같이 출력하도록 할 수 있지 않을까요?
결론부터 말하자면 그렇게 할 수 없습니다!
데이터베이스 원서에도 위와 같이 나와 있습니다.
HAVING은 그룹을 형성 한 후에 적용이 되지만
WHERE는 그룹을 만들기 전에 적용이 됩니다.
SELECT dept_name, AVG(salary) AS avg_salary
FROM instructor WHERE avg_salary > 40000
GROUP BY dept_name
그렇기 때문에 위와 같은 쿼리를 실행시킨다면 에러가 발생하게 됩니다!!
SELECT
content,
(SELECT COUNT(*) FROM CommunityReply WHERE Community.contentId = CommunityReply.contentId ) AS replyCount
FROM Community
HAVING replyCount > 0;
또한 서브 쿼리에서도 마찬가지로 적용이 됩니다.
위와 같이 Having을 이용해
게시글의 댓글이 0개 이상이면 게시글의 내용과 댓글 개수를 가져오는 쿼리가 있습니다.
이는 정상적으로 잘 실행됩니다.
하지만 HAVING을 WHERE로 변경하게 되면
replyCount를 찾을 수 없다고 아래와 같이 에러가 발생하게 됩니다.
'Database' 카테고리의 다른 글
참조 무결성 및 Cascade (0) | 2021.05.18 |
---|---|
Select절에서 사용할 수 있는 서브쿼리 Scalar Subquery (0) | 2021.04.29 |
SQL Aggregate Functions 집계함수, Group By 활용 (0) | 2021.04.27 |
Cartesian Product (0) | 2021.04.26 |
Super key, Candidate key, Primary key, Foreign key 비교 (3) | 2021.04.25 |
Comments