-
[ORACLE] 계층형 쿼리DATABASE 2019. 1. 10. 13:11
▶▷계층형 쿼리
실행순서
1. START WITH 절
2. CONNECT BY 절
3. WHERE 절
START WITH
: 처음 시작할 조건
계층의 부모(최상위) 행을 지정
서브쿼리 사용가능
CONNECT BY
: START WITH절의 데이터와 연결된 로우를 반복하여 찾기
상위와 하위의 관계 지정
서브쿼리 사용 불가능
- PRIOR 컬럼명 : 상위행의 컬럼 의미
- PRIOR 하위(자식)컬럼 = 상위(부모)컬럼 : 상위에서 하위로 트리 구성 (Top Down)
- PRIOR 상위컬럼 = 하위컬럼 : 하위에서 상위로 트리 구성 (Bottoom Up)
- NOCYCLE PRIOR : 무한루프방지(중복막기위해)
※ CONNECT BY절 다음의 AND조건은 순환 관계를 풀면서 AND 조건을 만족하지 않으면, 그 다음레벨은 더 이상 진행하지 않음을 의미함
FROM절 다음의 AND 조건은 순환구조를 모두 전개 한 후에 조건에 해당하는 로우만 추출함
LEVEL
: 계층의 순서(Depth) 표현
ORDER SIBLINGS BY
: 계층구조의 순서 정렬화 (계층구조는 유지하되 하위구조를 정렬화)
▷▶계층형 쿼리 예제 1
SELECTlec_cd, alt_lec_cd, LTRIM ( SYS_CONNECT_BY_PATH (lec_cd, ' > '), ' > ' ) AS depth_fullnameFROM lec030tlSTART WITH lec_cd is not nullCONNECT BY NOCYCLE PRIOR lec_cd = alt_lec_cd※ SYS_CONNECT_BY_PATH (컬럼명, 구분자)
: 계층구조의 경로를 보여주는 함수▷▶계층형 쿼리 예제 2
select
CONNECT_BY_ROOT dept_cd as ROOT_NAME
from COM010TL
where LEVEL>=2
and up_cd is not null
and DEPT_CD = '0434'
and rownum =1 -- ③ LEVEL이 2 이상이고 dept_cd가 0434이고 rownum이 1 (최상위)인 데이터 추출
START with up_cd is not null
and dept_cd <> '0001' -- ① up_cd가 null이 아니고 dept_cd가 0001이 아닌 데이터로 시작
CONNECT by PRIOR dept_cd=up_cd -- ② up_cd에서 dept_cd로 트리구성'DATABASE' 카테고리의 다른 글
[ORACLE] OUTER JOIN 예제 (0) 2019.06.13 [ORACLE] 이중 CASE문 예제 (0) 2019.02.14 [ORACLE] 특정문자의 개수 알아보기 (0) 2018.12.18 [MYSQL] SUBSTRING_INDEX 문자열 자르기 (0) 2018.12.13 [ORACLE] 매개변수가 있는 프로시저 (0) 2018.12.03