[oracle] 계층형 쿼리 CONNECT_BY
# HIERARCHY 구조
NODE - 하나의 노드는 실 테이블에서 하나의 로우에 해당
PARENT - 부모노드
CHILD - 자식노드
ROOT - 최상위에 있는 노드
LEAF - 최하위에 있는 노드, 더 이상 하위에 연결된 노드가 없는 노드
LEVEL - 층을 의미
# CONNECT_BY_ROOT는 SATRT_WITH절에 명시된 ROOT노드를 가지고 옴
# CONNECT_BY_ISCYCLE - A가 B의 자식노드임과 동시에 B가 A의 자식노드인 중복 참조를 하는 항목을 판별
# CONNECT_BY_ISLEAF - 해당 ROW가 LEAF인지 여부츨 체크, LEAF는 1, 아닐 경우는 0
# CONNECT_BY_ISLEAF 사용에 예
-- INDEX_CODE는 코드명 HI_INDEX_CODE는 상위 코드
SELECT
INDEX_CODE
,INDEX_NAME
,LEVEL -- 층을 의미
,SYS_CONNECT_BY_PATH(TRIM(INDEX_NAME), '>') AS PATH -- 연결구조를 보여줌
,SYS_CONNECT_BY_PATH(TRIM(INDEX_CODE), '>') AS CODE_PATH
FROM 테이블명
WHERE CONNECT_BY_ISLEAF = 0 -- 마지막 잎만 보여줄 경우 1, 아닐경우 0
START WITH HI_INDEX_CODE IS NULL -- 시작점 지정
CONNECT BY PRIOR INDEX_CODE = HI_INDEX_CODE
# CONNECT_BY_ROOT 사용 예제
SELECT
INDEX_CODE
,INDEX_NAME
,LEVEL
,SYS_CONNECT_BY_PATH(TRIM(INDEX_NAME), '>') AS PATH -- 연결구조를 보여줌
,SYS_CONNECT_BY_PATH(TRIM(INDEX_CODE), '>') AS CODE_PATH
,CONNECT_BY_ROOT INDEX_NAME AS ROOT_NAME
FROM LS_ST_INDEX
WHERE CONNECT_BY_ISLEAF = 0
START WITH HI_INDEX_CODE IS NULL -- 시작점 지정
CONNECT BY PRIOR INDEX_CODE = HI_INDEX_CODE
'IT > DB' 카테고리의 다른 글
[sql] set define off 사용법 (0) | 2015.11.29 |
---|---|
[sql] view 예제 (0) | 2015.11.29 |
[Oracle SQL] ORA-01719: 포괄 조인 운영 (+)는 OR 또는 IN의 연산수를 허용 에러 (0) | 2015.11.21 |
[Oracle SQL] merge into를 사용하여 insert 와 update (0) | 2015.11.21 |
[MariaDB] CentOS에 MariaDB(MySQL) 설치 및 사용 (0) | 2015.08.12 |