본문 바로가기
내가 공부하려고 올리는/DB

오라클 - 계층형 쿼리(Hierachical Select) 알아보기

by 결딴력 2021. 11. 17.
반응형

조직도

 

계층형 쿼리는 회사나 어떠한 단체의 조직도와 비슷합니다.

시작이 되는 Root Node(루트 노드)가 존재하고,

거기서부터 뻗어져 나오는 Parent node(부모 노드)와 Child node(자식 노드)가 존재합니다.

이렇게 어떠한 값과 어떠한 값이 연결되어 있기 때문에

부모 노드로부터 자식 노드 혹은 말단 노드까지,

자식 노드 혹은 말단 노드로부터 부모 노드 혹은 루트 노드까지

값을 조회할 수 있는 것이 계층형 쿼리입니다.

 

 

예제를 통해 계층형 쿼리를 알아보겠습니다.

 

 

 

 

1. 우선 계층형 쿼리를 이해하기 위해 TDEPT 테이블에 자료를 추가하고 변경합니다.

 

INSERT INTO

 

 

 

2. 자신을 상위부서로 지정하고 있는 테이블의 값을 추가한 값으로 변경합니다.

 

UPDATE SET

 

 

 

 

3. 자 이제 계층형 쿼리를 사용해봅시다.

  • 새로 INSERT 한 사장실을 기준으로 데이터를 전개해보겠습니다.

실행 결과



  • LEVEL은 해당 컬럼이 어느 정도 수준에 머물러 있는지를 나타냅니다.
    LEVEL을 더욱 가시적으로 느낄 수 있게 쿼리문을 다음과 같이 수정할 수 있습니다.



실행 결과



  • 계층형 쿼리를 사용하기 위해 'CONNECT BY PRIOR' 구문과 'START WITH' 구문을 활용합니다.
    상위 계층으로부터 하위 계층을 탐색할 때는 CONNECT BY PRIOR 뒤에
    '하위 계층 = 상위 계층'을 입력합니다.

  • 이후 START WITH 구문을 사용해 시작 조건을 알려줍니다.


 

4. 선택되는 행을 제어할 수 있습니다. 행 제어에는 두 가지 방식이 있습니다.

  • WHERE 조건절 안에서 제어

    선택되는 행 제어 방법
    다음과 같이 WHERE 조건 절에서 행을 제어하는 경우 입력한 행만 제어되는 것을 볼 수 있습니다.

 

  • CONNECT BY PRIOR 절 안에서 제어

    선택되는 행 제어 방법
    다음과 같이 'CONNECT PRIOR' 절 안에서 행을 제어하는 경우
    입력한 행을 포함한 하위 행 모두 제어가 됩니다.

 

 

 

5. 이번에는 전개를 반대 방향으로 해보겠습니다.

 

실행 결과

  • CONNECT BY PRIOR 뒤에 '부모 노드 = 자식 노드' 형태로 입력해 줍니다.
  • START WITH 뒤에 자식 노드의 조건을 입력합니다.

 

 

 


본 글은 다음 블로그 '일상 흔적' 님의 오라클 실습 편을 참조하여 작성되었습니다.

반응형

댓글