순수하게 서브쿼리문으로 수행되는 방법과, 서브쿼리문부터 실행되게 하는 방법, 서브쿼리문에서 메인쿼리문부터 실행되게 하는 방법을 알아보자.
select ename, sal
from emp --14
where deptno in (select deptno
from dept --4
where deptno=10);
아무 힌트를 주지 않고, 위의 쿼리문을 실행하면 오라클은 해시 세미 조인
을 실행한다.
위의 sql에서 서브쿼리부터 실행
되게 하고 싶다.
그럴 땐 no_unnest push_subq
힌트를 사용하면 된다.
semi join
: 서브쿼리가 아니라 조인 형태로 실행
no_unnest
: semi join
을 하지 않고, 순수하게 서브쿼리
로 작동
push_subq
: 서브쿼리부터 수행
no_push_subq
: 메인쿼리부터 수행
select ename, sal
from emp --14
where deptno in (select /*+ no_unnest push_subq */ deptno
from dept --4
where deptno=10);
dept
부터 먼저 읽은 것을 확인할 수 있다.
메인쿼리부터 실행되게 하려면
select ename, sal
from emp --14
where deptno in (select /*+ no_unnest no_push_subq */ deptno
from dept --4
where deptno=10);
no_push_subq 힌트를 주면 된다.