데이터베이스

oracle 데이터베이스 - 계층형 쿼리

먼지제거제 2020. 9. 3. 20:47

-계층형 쿼리란?

 

> 계층형 구조는 상하 수직관계의 트리 형태의 구조로 이루어진 형태

 

> 테이블에 저장된 데이터를 계층형 구조로 반환하는 쿼리

 

> 계층형 쿼리는 START WITH, CONNECT BY 절로 생성 가능

 

>계층형 정보를 표현하기 위한 목적으로 오라클 8부터 지원

 

 

 


 

 

-전형적인 예

 

> 계층형 정보에는 사회적인 의미의 계급구조 등 있음

 

> 소프트웨어 관점에서 , 웹 사이트에서 사용하는 답 변형 게시판 BOM(Bill of Material)등이 있음

 

>BOM(Bill Of Material) 이란?

  하나의 완제품이 만들어지는데 필요한 구성품목들 내역 혹은 조합도를 말한다.

 

 

 

 

 

내가 만들어본 구성도

 

 

> 품목이 하나의 노드가 되며 실제 테이블에서는 하나의 행에 대응한다.

 

> 상위에 있는 노드

 

> 모니터는 컴퓨터의 자식 노드를 말합니다.

 

> 리프 노드 더 이상 하위에 연결된 노드가 없는 항목을 말한다.

 

> 루프 트리 구조에서 최상위 노드를 말한다.

 

 

 

 

 


-계층형 쿼리 작성

 

CREATE

 

INSERT

 

 


 

 

 

 

>START WITH 루트 노드를 식별, 조건이 만족시 모든  ROW는 루트 노드가 됨, 생략이 가능하고 서브쿼리도 올 수 있음

 

> CONNECT BY PRIOR 은 각 행들이 서로 어떻게 연결되어야 하는지 조건을 지정하는 부분

 

> 여기서PRIOR 연산자는 등호(=)와 동등한 레벨로 사용되는 연산자이며, 해당 칼럼의 부모 행을 식별하는 데 사용됨

 

> 본체의 PARENTS_ID칼럼에는 컴퓨터의 ITEM_ID값을 가지고 있으므로 PRIOR연산자 SUBJECT_ID 앞에 붙게 됨

 

 

 

 

결괏값

 

 

 

 

특정 노드부터 하위 노드 끝까지 전개

vs

특정 노드는 제외하고 하위 노드는 전개

계층 구조에서 일부분만 계층화해서 결과를 보여드리겠습니다.

 

 

 


 

첫 번째 쿼리

 

 

> CONNECT  BY절에는 SUBJECT_NAME <>'메인보드' 조건이 있습니다.

> CONNECT  BY 절은 계층 구조 전개 조건입니다.

> 전개를 하지 않겠다는 것입니다.

 

 

 

 

 

 

 

 


 

두 번째 쿼리

 

 

 

 

> SUBJCET_NAME <>’메인보드조건이 WHERE절에 있으므로, 일단, 전체 계층 구조 전개를 다한 후에, 마지막에 

  SUBJECT_NAME메인보드만 안보여줌

 

> 같은 조건이라도 어디에 위치하느냐에 따라 집합에 차이가 있으니 주의!

 

> WHERE 절은, 성능면에서  CONNECT절에서 처리할수있는 부분은 처리해주고 

  WHERE절에 처리하지 않도록 해야 한다.

 

 

 

 

 

 


 

 

함수

 

 

CONNECT_BY_ISLEAF() 함수

 

 

>10g 버전부터 복잡한 계층을 간략하게 볼 수 있는 함수가 지원됨

 

> CONNECT_BY_ISLEAF0을 주고 마지막 값을 안 볼 수도 있고 1을 줘서 마지막 값만 볼 수도 있음

 

> SYS_CONNECT_BY_PATH() 함수를

 

 

 

일단 함수 사용하지 않고 출력

 

 

 


 

함수 사용하고 마지막 값 삭제하기

 

 

 


함수 사용하고 마지막 값만 출력하기

 

 

 

 

 

>특정 레벨에서의 최상위 값을 찾아주는 함수

 

>자신을 출력

 

>자신의 상위 노드까지 출력

 

>그 상위 노드의 상위 노드까지 출력

 


 

자기 자신만을 출력할 때

 

 

 


 

 

자신의 상위 노드까지 출력

 

 

 

 

 

 


따라 해 보시면 공부가 많이 되실 겁니다!!!