on
계층형 질의
계층형 질의
Hierarchical Query
테이블에 계층형 데이터가 존재하는 경우 계층형 질의를 사용합니다.
계층형 데이터는 동일 테이블에 계층적으로 상위와 하위 데이터를 포함한 데이터를 말합니다.
예를 들어 사원 사이에는 관리자와 일반 사원간의 관계가 존재할 수 있습니다.
부서도 마찬가지로 더 작은 조직과 상위 조직이 존재할 수 있습니다.
이런 식으로 구성된 데이터들을 순환관계 데이터 모델이라고 합니다.
계층형 데이터를 질의는 벤더마다 다른 문법을 지원합니다.
Oracle
SELECT
FROM 테이블명
WHERE 조건
START WITH 조건
CONNECT BY [NOCYCLE] 조건
[ORDER SIBILING BY 칼럼명]
START WITH은 계층 구조 전개의 시작 위치를 지정합니다.
CONNECT BY는 조건에 맞는 자식 데이터를 지정합니다.
PRIOR 자식 = 부모 형태를 사용하면 계층 구조에서 자식 데이터에서 부모 데이터 방향, 순방향 전개합니다.
PRIOR 부모 = 자식 형태의 경우 부모 데이터에서 자식 데이터 방향, 역방향으로 전개합니다.
데이터를 전개하면서 이미 나타났던 동일한 데이터가 전개 중 다시 나타나면 CYCLE이 형성되었다고 합니다.
사이클이 발생되면 런타임 오류가 발생합니다.
NOCYCLE을 추가하면 사이클이 발생한 이후 데이터는 전개하지 않습니다.
형제 노드 사이에서 정렬을 수행하는 옵션을 추가할 수 있습니다.
가상 칼럼이 추가됩니다.
가상 칼럼 설명 LEVEL 루트 데이터면 1, 하위 데이터는 2입니다. 리프 데이터까지 1씩 증가합니다. CONENCT_BY_ISLEAF 전개 과정에서 데이터가 리프면 1, 아니면 0입니다. CONNECT_BY_ISCYCLE 전개 과정에서 자식을 갖는데 해당 데이터가 조상에서 존재하면 1 아니면 0입니다.
순방향과 역방향에서 방향은 계층에서의 상, 하 중 어느쪽으로 가느냐와 연관됩니다.
관리자를 기준으로 관리하고 있는 사원들을 나열한다면 관리자 -> 사원 방향으로 관리자가 갖고 있는 사원을 찾습니다.
자신이 갖고 있는 데이터 방향대로 진행하므로 순방향 전개라고 합니다.
반대로 사원이 자신을 관리하는 관리자를 찾는 경우, 자기 자신의 데이터가 아닌 데이터에서 찾아야 합니다.
이는 자신의 데이터에서 꼬리물기식으로 내려가는 게 아닌 자신의 윗방향을 찾아가야 합니다.
이런 경우를 역방향이라고 합니다.
from http://inhoo.tistory.com/34 by ccl(A) rewrite - 2021-08-30 21:26:14