CORERELATED 서브쿼리 (연관성 있는 서브쿼리)
-- Inner Query에서 Outer Query의 어떤 컬럼 값을 사용하는 경우를 일컬음
-- Inner Query = Sub Query, Outer Query = Main Query
-- 대게의 경우 Main Query가 Sub Query의 결과를 이용하기만 하는데, CORERELATED 서브쿼리의 경우 Sub Query도 Main Query의 값을 이용하게 됨
-- 주의: Correlated Sub query는 Main Query에서 하나의 레코드가 조건 절에서 비교되기 위해서 Inner Query 가 꼭 한번씩 수행되어야 하므로, Sub Query의 response time이 늦고 Main Query에서 처리될 record 수가 많은 경우 속도가 저하 될 수 있음 --> InLine View 등 다른 방법을 강구해야 함.
[따라하기]
-- 틀린 답 (조인 사용)
select a.emp_id, a.emp_name from
temp a, (select lev, avg(salary) as a_sal
from temp
group by lev) b
where a.lev = b.lev
and a.salary > b.a_sal;
-- 옳은 답 (연관성 있는 서브 쿼리 사용)
select a.emp_id, a.emp_name
from temp a
where a.salary > (select avg(salary)
from temp b
where b.lev = a.lev);
[예제2] UPDATE 문에서의 활용
update tdept a
set a.boss_id = (select min(b.emp_id)
from temp b
where b.dept_code =a.dept_code);
[Q/A : 03-13] INSERT문의 이용
-- 실행 안되는 문장
insert into tcom values (select '2002',emp_id, 0.1, 0.1 * salary from temp);
-- 실행 되는 문장
insert into tcom (work_year, emp_id, bonus_rate, comm)
select '2002',emp_id, 0.1, 0.1 * salary from temp;
'Oracle_DB_Unix admin > (6)오라클 실습 (이채남 저)' 카테고리의 다른 글
4장 2절: DECODE 함수의 활용 (0) | 2016.03.11 |
---|---|
4장: 사례 이해를 위한 필수 사항 (0) | 2016.03.01 |
3-5장 ANY와 ALL (0) | 2016.03.01 |