본문 바로가기

Development/SQL

[ORACLE] 계층구조 쿼리 START WITH

728x90

[ORACLE] 계층구조 쿼리 START WITH

 

예제

-- LEVEL컬럼으로 depth를 알수 있다.

-- JONES의 관리자는 KING 이며, SCOTT의 관리자는 JONES 이다.

-- 상/하의 계층 구조를 쉽게 조회 할 수 있다.

 

SELECT LEVEL, empno, ename, mgr

FROM emp

START WITH job = 'PRESIDENT'

CONNECT BY PRIOR empno = mgr;

 

LEVEL     EMPNO     ENAME     MGR

------    --------  --------  -------

1         7839      KING

2         7566      JONES     7839

3         7788      SCOTT     7566

4         7876      ADAMS     7788

3         7902      FORD      7566

4         7369      SMITH     7902

 

계층구조 쿼리 Synctax

 

START WITH

- 계층 질의의 루트(부모행)로 사용될 행을 지정 한다.

- 서브쿼리를 사용할 수도 있다.

 

CONNECT BY

- 이 절을 이용하여 계층 질의에서 상위계층(부모행)과 하위계층(자식행)의 관계를 규정 할 수 있다.

- PRIOR 연산자와 함께 사용하여 계층구조로 표현할 수 있다.

- CONNECT BY PRIOR 자식컬럼 = 부모컬럼 : 부모에서 자식으로 트리구성 (Top Down)

- CONNECT BY PRIOR 부모컬럼 = 자식컬럼 : 자식에서 부모로 트리 구성 (Bottom Up)

- CONNECT BY NOCYCLE PRIOR : NOCYCLE 파라미터를 이용하여 무한루프 방지

- 서브쿼리를 사용할 수 없다.

 

LEVEL Pseudocolumn

- LEVEL은 계층구조 쿼리에서 수행결과의 Depth를 표현하는 의사컬럼이다.

 

ORDER SIBLINGS BY

- ORDER SIBLINGS BY절을 사용하면 계층구조 쿼리에서 편하게 정렬작업을 할 수 있다.

 

CONNECT BY의 실행순서는 다음과 같다.

- 첫째 START WITH 절

- 둘째 CONNECT BY 절

- 세째 WHERE 절 순서로 풀리게 되어있다.

 

출처 : 구루비 였던거 같음

http://www.gurubee.net/lecture/1300

 

728x90
반응형