계층형 쿼리 심화학습
① 계층형 쿼리 정렬
계층형 쿼리는 계층형 구조에 맞게 순서대로 출력되는데 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;
부서명으로 정렬을 하니 계층형 구조가 모두 깨져 버렸다. 사실 계층형 쿼리에서는 굳이 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;
ORDER SIBLING BY 절의 역할은 계층형 구조를 깨지 않고 정렬을 수행한다. 결과를 보면 같은 부모를 가진 로우, 즉 레벨이 같은 형제 로우에 한해서 정렬이 수행됐음을 알 수 있다. 예를 들어 [그림7-8]을 보면 ‘구매/생산부’를 부모로 가진 5개 부서에 한해 부서명으로 정렬되었지, 부모가 다른 기획부와 운영팀은 부서명으로 정렬되지 않았음을 확인할 수 있다.