계층형 쿼리(Hierarchical Query)란 오라클8버전부터 지원하는 기능중에 하나입니다.

 

상위데이터부터 하위데이터까지 계층적으로 수직적인 관계를 나타내며

회사 직급이나 유통과정, 기업부터 고객까지의 관계 등 다양하게 표현할 수 있습니다.

흔히 쓰이는 기술이기도 하며 서브쿼리와 여러테이블을 자유자재로 활용한다면 중급측에도

속한다고 할 수 있는 기능입니다.

 

계층형구조

예시로 이러한 형태의 관계도를 쿼리로 작성하여 보기편하게 데이터화 하는 기능입니다.

 

쿼리문을 작성하기 전에 계층형 구조에서 쓰이는 용어를 알려드리겠습니다.

 

- 노드(NODE) : 항목 하나하나를 노드라고 부릅니다.

- 루트(ROOT) : 트리구조에서 가장 위에 있는 노드를 말합니다. 위의 조직도에서는 회장이 루트노드입니다.

- 부모(PARENT) : 트리구조에서 상위의 있는 노드입니다. 위의 조직도에서는 회장,부회장,본부 등 상위의 노드를 말합니다.

- 자식(CHILD) : 부모아래에 있는 노드를 말합니다. 회장의 자식노드->부회장, 팀장의 자식노드->부장

- 리프(LEAF) : 가장 하위의 노드를 말합니다. 과장이 리프노드가 됩니다.

 

1. 위의 관계도를 기반으로 테이블을 생성

 

COMPANY_TEST 라는 테이블 생성하였습니다.

 

2. 데이터를 삽입합니다.

회장부터 경영,영업,사업본부 하위 노드까지 인서트합니다.

 

초기 값을 SELECT한 결과입니다.

 

3. START WITH...CONNECT BY 문법을 사용하여 조회문 작성

계층형 쿼리를 사용한 SELECT문입니다.

 

계층형 쿼리를 사용하여 출력한 데이터입니다.

 

 

- LPAD : 지정한 길이만큼 왼쪽부터 특정문자로 채우는 함수입니다.

            LPAD("값","총 문자길이","채움문자")

 

- START WITH : 최상위 루트노드를 지정합니다.

                      최상위 루트노드인 회장의 부모노드는 NULL이므로 PRNT IS NULL 이라고 작성합니다.

 

- CONNECT BY : 부모와 자식노드를 찾아서 연결합니다.

 

- PRIOR : 자식노드쪽에 붙여서 작성합니다.

 

- LEVEL : 오라클의 모든 실행쿼리에서 사용가능하며 트리내에서 어떤 단계에 있는지 나타내는 값입니다.

            START WITH과 CONNECT BY를 사용해 부모자식노드를 연결한 후 LEVEL로 데이터를 보기쉽게 계층화 합니다.

 

 

LIST

+ Recent posts