[SQL] 다중컬럼 서브 쿼리 예제

정은아·2022년 9월 13일

Q. 직급이 'MANAGER'인 사원들이 받는 급여들의 최소 급여보다 많이 받는
사원들의 이름과 급여, 부서번호를 출력하되 부서번호가 20인 사람은 제외하라.

   select ename, sal, deptno
   from emp
   where sal > (select MIN(sal) from emp where job = 'MANAGER')
   AND deptno <> 20;

   select ename, sal, deptno
   from emp
   where sal > ANY(select sal from emp where job = 'MANAGER')
   AND deptno <> 20;

. ROWDUM : sub Query에서 반환되는 각 행에 1부터 시작하는 순차 값을 할당함

select rownum, ename, sal, from emp;

Q. emp테이블에서 최상위 소득자 3명의 이름과 급여를 표시하시오

 select ROWNUM as RANK , ename, sal
 from (select ename, sal from emp ORDER BY sal desc)
 where ROWNUM <= 3;

 . ROWNUM 함수를 ORDER BY 함수와 함께 사용하면 순번이 뒤죽박죽 됩니다. 
   그 이유는 먼저 순번을 매기고 난 후, ORDER BY 정렬을 하기 때문입니다.
   그렇기 때문에 ORDER BY절로 정렬을 해준 후, ROWNUM을 해주어야 한다.

   select rownum, kbs.ename, kbs.sal from
   (select * from emp order by sal desc) kbs;

Q. 'SALES' 부서의 모든 사원의 이름과 급여를 출력하되
월급이 높은 사람이 먼저 나오고 거기에 순번을 붙이시오.

select rownum as rank, ename, sal
from (select * from emp ORDER BY sal desc)
where deptno = (select deptno from dept where dname = 'SALES');
profile
꾸준함의 가치를 믿는 개발자

0개의 댓글