DB 이야기

디비 이야기 24. 계층형 질의

김푸른초푸른 2020. 3. 16. 21:52

1. 계층형 질의란? (트리구조)

= 테이블에 계층형 데이터가 존재할 경우, 데이터를 조회하기 위해 사용한다 

 

2. 계층형 질의 문법(순방향) - 위-> 아래로 진행 

SELECT *

  FROM 테이블명

WHERE 조건

START WITH 구조 전개의 시작위치 

CONNECT BY [NOCYCLE] 각 행들의 연결 조건(조인)

[ORDER SIBBLING BY 컬럼1, 컬럼2...]

-> 주어진 조건을 만족해야한다 

 

* PRIOR : CONNECT BY절에 사용하며 현재 읽은 칼럼을 지정한다 

PRIOR 자식 = 부모 -> 순방향PRIOR 부모 = 자식 -> 역방향 

* NOCYCLE : 데이터 전개시 동일한 데이터가 전개 중 다시 나타나면 런타임 오류가 나타나므로 NOCYCLE 추가하여 사이클 발생후 데이터를 전개하지 않는다

* WHERE : 필터링

* SIBBLING BY : 같은 동일한 LEVEL 사이에 정렬을 한다.

 

 

EX) SELECT LEVEL, EMPNO, ENAME, MGR, JOB
FROM EMP
START WITH JOB = 'PRESIDENT'
CONNECT BY PRIOR EMPNO = MGR AND LEVEL <= 3;


3. 가상칼럼 종류 

1) LEVEL 

= 트리구조에서 계급처럼 나누어지는 번호로 상위단계와 이 상위단계에 속해 있는 하위컬럼을 번호순으로 보여준다

 

2) CONNECT BY ISLEAF 

= 자식 로우가 있는지 없는지 여부를 체크해주는 함수. 자식노드가 있으면 0, 아니면 1

 

3) CONNECT BY ISCYCLE

= 계층형 로우가 부모 노드를 찾을 시 사용하는 함수. 중복참조하여 자식 노드가 있으면 1, 아니면 0

EX) 

SELECT LEVEL
            ,LPAD(' ' ,2*(LEVEL-1)) || NAME AS NAME
            ,CONNECT_BY_ISCYCLE AS CYCLE 
   FROM  TEST_TABLE_ONE
              START WITH P_LEVEL=1
              CONNECT BY NOCYCLE PRIOR P_LEVEL=PP_LEVEL  

 

 

3. 계층형 질의 문법(역방향) 아래에서 위로 

1) SYS_CONNECT_BY_PATH

= 현재 로우까지 PATH정보를 쉽게 얻을 수 있다

EX) SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename, empno,
       SYS_CONNECT_BY_PATH(ename, '/') "PATH"
        FROM emp
     START WITH job='PRESIDENT'
     CONNECT BY PRIOR empno=mgr;

 

2) CONNECT_BY_ROOT

= LEVEL이 0인 최상위 로우의 정보를 얻어 올 수 있다

 

 

4. order by 차이점

 

'DB 이야기' 카테고리의 다른 글

디비이야기 25. PL/SQL(절차형 SQL)  (0) 2020.03.29
디비 이야기 25. 그룹함수   (0) 2020.03.16
디비 이야기 23. 트랜젝션   (0) 2020.03.11
디비 이야기 22. 데이터 무결성  (0) 2020.03.11
디비이야기 21. MERGE문  (0) 2020.03.11