본문 바로가기

SQL문

SQL문 HAVING 구에 대해서

반응형

이전 글에서  GROUP BY에 대해서 알아보았습니다. 

 

2022.07.25 - [SQL문] - SQL문 테이블 그룹 나누는 방법

2022.07.26 - [분류 전체보기] - SQL문 GROUP BY구 주의 할 점

 

이전 글에서는  집약한 결과에서 조건을  지정을 해서  선택하는 방법에 대해서는  공부를 하지 않았습니다.  이번  글에서는 조건을 지정을 하는 방법에 대해서 알아보겠습니다. 

 

예을 들어서   집약한 결과에서  결과 행이 5행인  그룹만 선택을 하고자 하는 경우에  어떻게  할 까요?   WHERE 구를  알고 있다면 대부분  WHERE 구를 이용을 하고자 할 것입니다.   

 

하지만 이 WHERE 구는  행을 선택을 위한 조건만  지정을 할 수가 있습니다.  그래서 GROUP BY  조건에는  이용을 할 수가 없습니다. 

 

이때 이용을 하는 것이 HAVING  구입니다.  그럼 어떻게 이용을 할 수가 있는지  확인을 하여 보도록 하겠습니다.

 

SELECT  < 열명>,<열명2>,<열명3> FROM < 테이블명>  GROUP BY  < 열명1>, <열명2>,<열명3>  HAVING  <그룹값에 대한 조건>  ;

 

 

위 구문을 실행을 할 때  DBMS 내부 실행 순서는 아래와 같습니다.

 

SELECT   >  FROM  >  WHERE  >  GROUP BY > HAVING   이런 식으로 실행이 됩니다. 

 

아래  구문을 보도록 하겠습니다.

 

SELECT  M_CLASS ,COUNT(*)  FROM  MyTest01  GROUP BY M_CLASS   ;

 

M_CLASS  | COUNT

PC부품       |   5

사무용품     |   5

기타용퓸     |   100

 

HAVING 구를 이용을 하지 않고  GROUP BY 구를 이용을 하였습니다.  여기서  행수가 5인  그룹만  출력을 하고자 하는 경우에   아래와 같이  구을 작성을 하여서  실행을 하시면 됩니다.

 

 

SELECT  M_CLASS ,COUNT(*)  FROM  MyTest01  GROUP BY M_CLASS  HAVING  COUNT(*) = 5   ;

 

이렇게 작성을 하고 실행을 하여 보면  아래와 같은 결과를 얻을 수가 있습니다. 

 

M_CLASS  | COUNT

PC부품       |   5

사무용품     |   5


HAVING  구에 쓸수가 있는 요소는 어떻게 될까?

 

HAVING 구 사용을 할 수가 있는 요소가 제한이 되어 있기 때문에  HAVING 구를 이용을 할 때는  아래  세 가지 요소만 이용을 하셔야 합니다. 

 

  • 상수 
  • 집약 함수
  • GROUP BY 구 기술한 열명

경우에 따라서  WHERE 구를  이용을 해서 조건을 지정을 하는 경우와 HAVING 구를 이용을 해서 조건을 지정을 하는 경우  동일한 결과를 얻을 수가 있습니다. 

 

예을 들어서   두 구문을 보시면  확인을 할 수가 있습니다. 

 

SELECT  M_CLASS ,COUNT(*)  FROM  MyTest01  GROUP BY M_CLASS  HAVING  M_CLASS  = 'PC부품'   ;

 

SELECT  M_CLASS ,COUNT(*)  FROM  MyTest01  WHERE  M_CLASS  = 'PC부품'   GROUP BY M_CLASS   ;

 

이렇게  두 구문은 동일한  결과를 출력을 합니다. 그래서  상황에 따라서  사용자가  선택을 하시면 됩니다. 

 

 

참고적으로 이야기를 하자면   WHERE구를 이용을 하는 경우와  HAVING 구를 이용을 해서 처리를 할 때  속도가 차이가 있습니다. 

 

처리 속도 측면에서 확인을 하면 HAVING 구 보다는 WHERE구를 이용을 해서  처리를 하는 것이 속도가 더 빠르게 처리가 됩니다. 

 

이 부분을   참고를 해서 이용을 하시면 됩니다. 

반응형

'SQL문' 카테고리의 다른 글

SQL 문 트랜잭션 1편  (0) 2022.08.30
SQL문 테이블 그룹 나누는 방법  (0) 2022.07.25
SQL문 집약 2편  (0) 2022.07.21
SQL문 논리연산자 2편 & 집약  (0) 2022.07.20
SQL문 비교연산자 2편  (0) 2022.07.18
SQL 산술연산자와 비교연산자  (0) 2022.07.13
SQL 주석 작성법  (0) 2022.07.11