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');