Oracle Database 26. 서브쿼리
서브쿼리
- 쿼리문 안에 들어가는 쿼리문을 서브쿼리라고 한다.
- 쿼리문 작성시 사용되는 값을 다른 쿼리문을 통해 구해야 할 경우 사용한다.
ex)
-- SCOTT사원이 근무하고 있는 부서의 이름을 가져온다.
select dname
from dept
where deptno = (select deptno
from emp
where ename = 'SCOTT');
-- join으로도 가능하다.
select a2.dname
from emp a1, dept a2
where a1.deptno = a2.deptno and a1.ename = 'SCOTT';
ex)
-- SMITH와 같은 부서에 근무하고 있는 사원들의 사원번호, 이름, 급여액, 부서이름을 가져온다.
select a1.empno, a1.ename, a1.sal, a2.dname
from emp a1, dept a2
where a1.deptno = a2.deptno and a1.deptno = (select deptno
from emp
where ename = 'SMITH');
ex)
-- MARTIN과 같은 직무를 가지고 있는 사원들의 사원번호, 이름, 직무를 가져온다.
select empno, ename, job
from emp
where job = (select job
from emp
where ename = 'MARTIN');
ex)
-- ALLEN과 같은 직속상관을 가진 사원들의 사원번호, 이름, 직속상관이름을 가져온다.
-- a : 사원의 정보
-- b : 직속상관 정보
select a.empno, a.ename, b.ename
from emp a, emp b
where a.mgr = b.empno and a.mgr = (select mgr
from emp
where ename = 'ALLEN');
ex)
-- WARD와 같은 부서에 근무하고 있는 사원들의 사원번호, 이름, 부서번호를 가져온다.
select a.empno, a.ename, b.deptno
from emp a, dept b
where a.deptno = b.deptno and a.deptno = (select deptno
from emp
where ename = 'WARD');
ex)
-- SALESMAN의 평균 급여보다 많이 받는 사원들의 사원번호, 이름, 급여를 가져온다.
select empno, ename, sal
from emp
where sal > (select avg(sal)
from emp
where job = 'SALESMAN');
ex)
-- DALLAS 지역에 근무하는 사원들의 평균급여를 가져온다.
select trunc(avg(sal))
from emp a, dept b
where a.deptno = b.deptno and b.loc = (select loc
from dept
where loc = 'DALLAS');
ex)
-- SALES 부서에 근무하는 사원들의 사원번호, 이름, 근무지역을 가져온다.
select a1.empno, a1.ename, a2.loc
from emp a1, dept a2
where a1.deptno = a2.deptno and a1.deptno = (select deptno
from dept
where dname = 'SALES');
ex)
-- CHICAGO 지역에 근무하는 사원들 중 BLAKE가 직속상관인 사원들의 사원번호, 이름, 직무를 가져온다.
select empno, ename, job
from emp
where deptno = (select deptno
from dept
where loc = 'CHICAGO')
and mgr = (select empno
from emp
where ename = 'BLAKE');