HAVING
EMP 테이블에서 부서번호가 20, 30 인 부서를 대상으로 부서의 총 급여가 10000 보다 적을 경우만 부서별 총 급여를 조회한다.
SELECT DEPTNO, SUM(SAL)
FROM EMP
WHERE DEPTNO IN (20, 30)
AND SUM(SAL) < 10000
GROUP BY DEPTNO;
--==>> 에러 발생
-- ORA-00934: group function is not allowed here
-- (GROUP 함수를 일반 WHERE에서 쓸 수 없어서 생기는 오류)
-- 1
SELECT DEPTNO, SUM(SAL)
FROM EMP
WHERE DEPTNO IN (20, 30)
GROUP BY DEPTNO
HAVING SUM(SAL) < 10000;
--==>> 30 9400
-- 2
SELECT DEPTNO, SUM(SAL)
FROM EMP
GROUP BY DEPTNO
HAVING SUM(SAL) < 100000
AND DEPTNO IN (20, 30);
--==>> 30 9400
같은 결과이긴 하지만 FROM과 WHERE로 1차적 메모리를 올리고 그 이후에 추가적으로 계산하는데 이 논리로 보면 오라클에게는 1번을 조금 더 원할하게 처리
이러한 작은 차이가 퍼포먼스로 이어진다.
부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.
이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.
'SQL > Oracle' 카테고리의 다른 글
30. ROW_NUMBER, 시퀀스(SEQUENCE) (0) | 2022.03.29 |
---|---|
29. 중첩 그룹함수 / 분석함수 (0) | 2022.03.12 |
27. CUBE (0) | 2022.03.12 |
26. ROLLUP, GROUPING (0) | 2022.03.12 |
25. 그룹 함수 (0) | 2022.03.12 |