본문 바로가기

DB/MY-SQL

[MY_SQL] where절과 having절의 차이


SQL구문을 처음 공부하던 당시, where절과 having절의 차이를 잘 몰랐는데요.

왜냐하면 두 구절이 비슷한 성격의 '조건절'이었기 때문이었죠. 그렇다면 where절과 having절이 어떤 차이가 있는지 살펴보겠습니다.

1. WHERE

select * from 테이블명 where 조건절

위와 같은 방법으로 where 조건절을 사용합니다.

항상 from뒤에 위치하고 조건에는 다양한 비교연산자들이 사용되어 구체적인 조건을 줄 수 있습니다.

2. HAVING

select * from 테이블명 group by 필드명 having 조건절

위와 같은 방법으로 having 조건절을 사용합니다.

항상 group by뒤에 위치하고 where 조건절과 마찬가지로 조건에는 다양한 비교연산자들이 사용되어 구체적인 조건을 줄 수 있습니다.

3. 차이점

where은 기본적인 조건절로서 우선적으로 모든 필드를 조건에 둘 수 있습니다. 하지만 having은 group by 된 이후 특정한 필드로 그룹화 되어진 새로운 테이블에 조건을 줄 수 있습니다.

예를 들어

1)mysql> select name, count(*) as cnt from where name='홍길동' 테이블 group by name;
2)mysql> select name, count(*) as cnt from 테이블 group by name;

1)의 경우는 where 조건절에 맞는 정보를 우선적으로 들고와서 group by로 그룹화 하고

2)의 경우는 group by로 그룹화 한 상태에서 having 조건절에 맞는 정보를 들고옵니다. 이때 having 조건절에 이용할 컬럼은 select 뒤에 반드시 명시 되어져야 합니다.

* 글로 설명하려니 어렵지만, 막상 테스트 해보면 금방 알 수 있습니다.

출처 : http://www.cyworld.com/springlog