SQL

GROUP BY ,HAVING, ORDER BY 절, SELECT문 검색 순서

저스크라이크헤븐 2019. 12. 24. 16:46

SELECT DEPTNO, MAX(SAL) FROM EMP
GROUP BY DEPTNO

-->부서별로 묶는다

예제1) 각 부서 내에서 담당 직급별 최대 급여 검색 SELECT DEPTNO, JOB, MAX(SAL) FROM EMP
GROUP BY DEPTNO, JOB
ORDER BY DEPTNO, JOB;

->DEPTNO, JOB으로 묶은다음

   DEPTNO, JOB로 정렬한다


HAVING절: 그룹화 한 후 조건절
SELECT DEPTNO, AVG(SAL) FROM EMP
WHERE DEPTNO>=20 --묶기전에 거른다
GROUP BY DEPTNO;
--HAVING AVG(SAL)>=2000;

에제2) JOB이 SALESMAN이 아닌 사원중에서 JOB별로 JOB,급여합계를 출력
급여합계가 5000이상만 (단 급여합계는 오름정렬) 
SELECT JOB, SUM(SAL) FROM EMP
WHERE JOB!='SALESMAN'
GROUP BY JOB
HAVING SUM(SAL)>=5000
ORDER BY SUM(SAL);

검색 순서
FROM->WHERE->GROUP BY->HAVING->SELECT->ORDER BY

SELECT문이 실행되고 정렬이 시작되기 때문에 ROWNUM 같은 함수를 쓰면 

정렬이 엉망이 된다. 그것을 방지하려면 서브쿼리문을 사용해 정렬을 먼저하고

ROWNUM을 사용해야 한다.