[SQL] 계층형 쿼리 - START WITH ~CONNECT BY ~ORDER SIBLINGS BY

김아름·2022년 8월 8일
1

SQLD

목록 보기
7/11
post-thumbnail



문제로 바로공부

1. 계층형 조회문제는 조회를 통해 어떻게 레코드가 재배치 되는지 파악하는 것이 중요

  • 동일한 값을 가진 컬럼끼리 연결되며 재배치 됨

2. 계층구조의 시작점 (START WITH...)

  • 계층구조(트리)가 시작되는 지점(= ROOT 노드)을 알려줌
  • START WITH 뒤에 적힌 조건에 맞는 레코드가 ROOT 노드(부모)임
  • 현재 SQL문에서는 [ㄱ]행이 트리구조의 ROOT 노드

3. 계층구조가 연결된 방향성 (CONNECT BY...)

  • 계층구조(트리)가 연결 된 방향성을 알려줌
    ex) 자식노드 -> 부모노드, 부모노드 -> 자식노드

  • 방향을 알면 a와 b 레코드가 있을 때 둘 중 무엇이 먼저 배치되는지 알수 있음

  • 모든 레코드에 대해서 이런 관계성을 파악하면
    재배치된 테이블에서 전체 레코드의 순서를 알 수 있음


4. 시작점으로 지정된 [ㄱ]레코드의 col1, col2를 주목

  • [ㄱ]레코드에서 col2는 NULL이고, col1이 NULL인 값은 없다.
  • 따라서,

    1) col1과 동일한 col2값을 가진 레코드를 찾는다.
    2) 위치는 col1 앞 = col2이므로 [ㄱ]보다 앞에 배치한다.

  • col2가 11인 레코드는 [ㄴ], [ㄷ] 총 2개
  • 이에대한 순서를 정해주는 명령어는 ORDER SIBLING BY

** 내림차순인데 오름차순으로 되어있음

  • 잔여분 레코드까지 기준에 맞게 배치



참고

profile
쿄쿄쿄

0개의 댓글