프로그래밍 & 알고리즘 & IT/SQL

[SQL] where절과 having 절의 차이

라니체 2022. 9. 17. 12:16
728x90

오늘은 SQL을 사용할 때

혼동하기 쉬운 문법인

where 절과 having 절의 차이에 대해서 포스팅 하겠다. (단, 아래 내용은 postgre sql 기준이다.)

보통 sql 문법은

select

from

where 로 이루어져 있는데

여기서 where는 기본적으로 from 에 들어있는 relation에 대한 조건으로써 역할을 하게 된다.

그런데 만약 group by 함수를 통해 데이터의 통계량을 그룹별로 구하였을 때, 그 그룹에 대한 조건을 걸기 위해서는 having 절을 사용해야 한다.

그 예로

select age

from patients

where age>=30;

이라는 구문을 쓰면 30세 이상의 환자들만 뽑히는 쿼리가 될 것이다.

그런데 만약

select disease, avg(age)

from patients

where avg(age)>=30

group by disease;

이라는 구문을 쓰게 되면 질병(disease)에 따라 환자들을 그룹화 하기전에 (즉 group by 문이 실행되기 전에) where절이 먼저 수행되게 된다. 따라서 이때는 avg(age)가 만들어지기 전이므로 에러가 나게 될 것이다.

이를 해결하기 위해서는 아래와 같이 having절을 사용해야 한다. having절은 group by가 실행된 후에 조건을 수행한다.

select disease, avg(age)

from patients

group by disease

having avg(age)>=30;

이 쿼리의 결과로 우리는 질병에 따른 환자들의 평균 나이를 볼 수 있는데 그 평균 나이가 30세 이상인 질병만 볼 수 있게 된다. 이처럼 having 절은 group by가 수행된 후에 수행되므로, 집계함수를 조건으로 걸 수 있게 된다.