안녕하세요~
요즘 계층구조 쿼리를 보고 있는데, 이해가 잘 안가는 부분이 있어서 머리가 아픕니다.
많은 것이 궁금합니다만 제일 궁금한 부분은 내부 동작원리입니다.
과연 계층구조 쿼리는 어떤순서로 실행이 되는지 아시는 분들 계시면, 제발 속 시원한 설명 부탁드립니다.
(내용이 많이 깁니다. 읽어주시는 분들께 미리 감사 말씀드립니다.)
저는 아래와 같은 방법으로 이해를 했습니다
혹시 잘못된 곳이 있다면 지적 부탁드리겠습니다.
SELECT LEVEL, LPAD(' ', 4*(LEVEL-1)) || ename ename,
PRIOR ename mgrname,
empno, mgr, job
FROM emp
START WITH job='PRESIDENT'
CONNECT BY PRIOR empno=mgr;
LEVEL ENAME MGRNAME EMPNO MGR JOB
------- -------------------- ---------- ---------- ---------- ---------
1 KING 7839 PRESIDENT
2 JONES KING 7566 7839 MANAGER
3 SCOTT JONES 7788 7566 ANALYST
4 ADAMS SCOTT 7876 7788 CLERK
3 FORD JONES 7902 7566 ANALYST
2 BLAKE KING 7698 7839 MANAGER
3 MARTIN BLAKE 7654 7698 SALESMAN
3 TURNER BLAKE 7844 7698 SALESMAN
3 JAMES BLAKE 7900 7698 CLERK
2 CLARK KING 7782 7839 MANAGER
3 MILLER CLARK 7934 7782 CLERK
1. 시작지점은 job='PRESIDENT'
-> 여기서는 KING 밖에 없으므로 시작지점은 KING으로만 시작
KING
2. 상위컬럼에 해당하는 KING을 제외한 나머지 행(ROW)중 mgr이 KING의 empno와 동일한 행을 찾음
-> 여기서는 JONES, BLAKE, CLARK 가 있음
KING
-JONES
-BLAKE
-CLARK
3. 다시 JONES을 시작점으로 나머지 행 중 mgr이 JONES의 empno와 동일한 행을 찾음
-> 여기서는 SCOTT, FORD가 있음
--> 여기서 궁금한 점 :
ㄱ. 상위행에서 하위행을 찾을 때마다 테이블의 풀스캔을 실행하는 건지?
ㄴ. 아니면 최초 풀 스캔(1회) 이후 행의 재배치(ORDER BY)만 이뤄지는 건지?
ㄷ. 계층구조 쿼리절은 반드시 풀스캔이 일어날 수 밖에 없는 구조인 것인지?
KING
-JONES
-SCOTT
-FORD
-BLAKE
-CLARK
4. 다시 SCOTT를 시작점으로 나머지 행 중 mgr이 SCOTT의 empno와 동일한 행을 찾음
-> 여기서는 ADAMS가 있음
KING
-JONES
-SCOTT
-ADAMS
-FORD
-BLAKE
-CLARK
5. 다시 ADAMS를 시작점으로 나머지 행 중 mgr이 ADAMS의 empno와 동일한 행을 찾음
-> 찾을 수 없음, 그렇다면 상위 행으로 돌아감
KING
-JONES
-SCOTT
-ADAMS
-FORD
-BLAKE
-CLARK
6. 이번엔 FORD 를 시작점으로 지금까지의 과정을 반복함
여기서 궁금한 점:
위 순서는 제가 생각하는 계층구조의 쿼리 실행순서 및 방법입니다.
혹시 이 방법말고 다른 방법으로 동작하는 건지요?
제가 잘못 이해하고 있다면 어느부분인지요?
여기저기 인터넷 검색을 통해서 공부를 하고 있습니다만,
오히려 혼란만 가중되어 여기에 이렇게 문의 드려봅니다.