SQLD - 계층형 조회(CONNECT BY)

헨도·2024년 2월 27일
0

SQLD

목록 보기
26/28
post-thumbnail

계층형 조회

  • 계층형 조회는 Oracle DB에서 지원하는 것으로 계층형으로 데이터를 조회할 수 있다.
  • 예를 들어 부장에서 차장, 차장에서 과장, 과장에서 대리, 대리에서 사원 순으로 트리 형태의 구조를 위에서 아래로 탐색하면서 조회하는 것이다.
    물론 역방향도 조회가 가능하다.
  • CONNECT BY는 트리(Tree) 형태의 구조로 질의를 수행하는 것으로 START WITH 구는 시작 조건을 의미하고 CONNECT BY PRIOR 는 조인 조건이다.
    Root 노드로부터 하위 노드의 질의를 실행한다.
  • 계층형 조회에서 MAX(LEVEL)을 사용하여 최대 계층 수를 구할 수 있다.
    즉, 계층형 구조에서 마지막 Leaf Node의 계층값을 구한다.

최대 계층값 출력

SELECT
	MAX(LEVEL)
FROM Limbest.EMP
START WITH MGR IS NULL
CONNECT BY PRIOR EMPNO = MGR;


-> 결과 값 : 4
  • 위의 SQL에서 MAX(LEVEL)이 4이므로 최대 깊이는 4이다.

CONNECT BY 키워드

키워드설명
LEVEL검색 항목의 깊이를 의미한다. 즉, 계층구조에서 가장 상위 레벨이 1이 된다.
CONNECT_BY_ROOT계층 구조에서 가장 최상위 값을 표시한다.
CONNECT_BY_ISLEAF계층 구조에서 가장 최하위를 표시한다.
SYS_CONNECT_BY_PATH계층 구조의 전체 전개 경로를 표시한다.
NOCYCLE순환 구조가 발생지점까지만 전개된다.
CONNECT_BY_ISCYCLE순환 구조 발생 지점을 표시한다.
  • CONNECT BY 구는 순방향 조회와 역방향 조회가 있다.
    순방향 조회는 부모 엔터티로부터 자식 엔터티를 찾아가는 검색을 의미하고, 역방향 조회는 자식 엔터티로부터 부모 엔터티를 찾아가는 검색이다.

계층형 조회

키워드설명
START WITH 조건계층 전개의 시작 위치를 지정하는 것이다.
PRIOR 자식 = 부모부모에서 자식방향으로 검색을 수행하는 순방향 전개이다.
PRIOR 부모 = 자식자식에서 부모방향으로 검색을 수행하는 역방향 전개이다.
NOCYCLE데이터를 전개하면서 이미 조회된 데이터를 다시 조회되면 CYCLE이 형성된다. 이때 NOCYCLE은 사이클이 발생되지 않게 한다.
Order siblings by 컬럼명동일한 LEVEL인 형제노드 사이에서 정렬을 수행한다.
profile
Junior Backend Developer

0개의 댓글