상호관련 서브 쿼리(Correlated Sub Query)란?
서브쿼리가 메인쿼리의 컬럼을 참조하면 상호관련 서브 쿼리이다.
소속 부서의 평균 급여보다 많은 급여를 받는 사원
메인 쿼리의 ROW의 수만큼 서브 쿼리가 실행된다.
상호 관련이 있는 테이블의 update에 사용시 유용하다.
-- 한번에 부모 테이블의 값이 업데이트 됨
SQL> update n_emp e
set dname = (select dname
from n_dept
where deptno = e.deptno);
서브쿼리가 메인쿼리의 컬럼을 참조하면 상호관련 서브 쿼리이다.
소속 부서의 평균 급여보다 많은 급여를 받는 사원
SQL> select * from emp e
where sal > (select avg(sal)
from emp
where deptno = e.deptno);
where sal > (select avg(sal)
from emp
where deptno = e.deptno);
메인 쿼리의 ROW의 수만큼 서브 쿼리가 실행된다.
상호 관련이 있는 테이블의 update에 사용시 유용하다.
SQL> create table n_dept
as
select * from dept;
as
select * from dept;
SQL> create table n_emp
as
select * from emp;
as
select * from emp;
SQL> alter table n_emp add (dname varchar2(10));
SQL> select * from n_dept;
SQL> update n_emp
set dname = 'ACCOUNTING'
where deptno = 10;
set dname = 'ACCOUNTING'
where deptno = 10;
-- 한번에 부모 테이블의 값이 업데이트 됨
SQL> update n_emp e
set dname = (select dname
from n_dept
where deptno = e.deptno);
SQL> update n_dept
set sum_sal = (select sum(sal)
from n_emp
where deptno = d.deptno);
set sum_sal = (select sum(sal)
from n_emp
where deptno = d.deptno);
'Oracle > SQL' 카테고리의 다른 글
현재 SCN 구하기 (0) | 2010.10.01 |
---|---|
히든 파라미터 확인 SQL (0) | 2010.09.01 |
timezone (0) | 2009.12.15 |
rollup, cube, grouping sets 연산자 (1) | 2009.12.14 |
multi table insert (0) | 2009.12.14 |