예제 중척 루프문 JAVA, C
for(i=0; i<100; i++){
-- outer loop
for(j=0; j<100; j++){
-- inner loop // Do Anything ...
}
}
예제 PL/SQL
begin for outer in (select deptno, empno, rpad(ename, 10) ename from emp) loop
-- outer 루프 for inner in (select dname from dept where deptno = outer.deptno) loop
-- inner 루프 dbms_output.put_line(outer.empno||' : '||outer.ename||' : '||inner.dname); end loop; end loop; end;
Oracle 쿼리문과 동일 순서로 엑세스
```sql
select /*+ ordered use_nl(d) */ e.empno, e.ename, d.dname from emp e, dept d
where d.deptno = e.deptno
select /*+ leading(e) use_nl(d) */ e.empno, e.ename, d.dname from dept d, emp e where d.deptno = e.deptno
INDEX pk_dept : dept.deptno dept_loc_idx : dept.loc pk_emp : emp.empno emp_deptno_idx : emp.deptno * emp_sal_idx : emp.sal
QUERY
select /*+ ordered use_nl(e) */ e.empno, e.ename, d.dname, e.job, e.sal
from dept d, emp e
where e.deptno = d.deptno …………… ① and d.loc = 'SEOUL' …………… ② and d.gb = '2' …………… ③ and e.sal >= 1500 …………… ④
order by sal desc
Execution Plan ---------------------------------------------------
0 SELECT STATEMENT
1 0 SORT ORDER BY - sal 기준 내림차순(desc) 정렬(ID = 1)
2 1 NESTED LOOPS
3 2 TABLE ACCESS BY INDEX ROWID DEPT - 인덱스 rowid로 dept 테이블 액세스(ID = 3)
4 3 INDEX RANGE SCAN DEPT_LOC_IDX - dept_loc_idx 인덱스 범위 스캔(ID = 4)
5 2 TABLE ACCESS BY INDEX ROWID EMP - 인덱스 rowid로 emp 테이블 액세스(ID = 5)
6 5 INDEX RANGE SCAN EMP_DEPTNO_IDX - . emp_deptno_idx 인덱스 범위 스캔(ID = 6)
SQL 조건절에 표시한 번호로 ② → ③ → ① → ④ 순.
실행계획을 해석할 때, 형제(Sibling) 노드 간에는 위에서 아래로 읽는다. 부모-자식(Parent-Child) 노드 간에는 안쪽에서 바깥쪽으로, 즉 자식 노드부터 읽는다.
데이터-엑세스-조인-OOO-중첩루프문-방식-OOO-장점-OOO-단점-OOO
데이터-엑세스-조인-OOO-중첩루프문-방식-적합한 곳-OOO