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

정은아·2022년 9월 13일
0

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개의 댓글