더북(TheBook)

계층형 쿼리 심화학습

① 계층형 쿼리 정렬

계층형 쿼리는 계층형 구조에 맞게 순서대로 출력되는데 ORDER BY 절로 그 순서를 변경할 수 있다.

입력

    SELECT department_id, LPAD(' ' , 3 * (LEVEL-1)) || department_name, LEVEL
      FROM departments
     START WITH parent_id IS NULL
     CONNECT BY PRIOR department_id  = parent_id
    ORDER BY department_name;
그림 7-7 계층형 쿼리 정렬 1

부서명으로 정렬을 하니 계층형 구조가 모두 깨져 버렸다. 사실 계층형 쿼리에서는 굳이 ORDER BY 절로 정렬할 필요가 없다. 왜냐하면 계층 구조별로 자동으로 정렬되기 때문인데, 앞의 쿼리처럼 부서명으로 정렬됨과 동시에 계층형 구조까지 보존하려면 ORDER SIBLINGS BY 절을 사용해야 한다.

입력

    SELECT department_id, LPAD(' ' , 3 * (LEVEL-1)) || department_name, LEVEL
      FROM departments
     START WITH parent_id IS NULL
     CONNECT BY PRIOR department_id  = parent_id
    ORDER SIBLINGS BY department_name;
그림 7-8 계층형 쿼리 정렬 2

ORDER SIBLING BY 절의 역할은 계층형 구조를 깨지 않고 정렬을 수행한다. 결과를 보면 같은 부모를 가진 로우, 즉 레벨이 같은 형제 로우에 한해서 정렬이 수행됐음을 알 수 있다. 예를 들어 [그림7-8]을 보면 ‘구매/생산부’를 부모로 가진 5개 부서에 한해 부서명으로 정렬되었지, 부모가 다른 기획부와 운영팀은 부서명으로 정렬되지 않았음을 확인할 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.