-계층형 쿼리란?
> 계층형 구조는 상하 수직관계의 트리 형태의 구조로 이루어진 형태
> 테이블에 저장된 데이터를 계층형 구조로 반환하는 쿼리
> 계층형 쿼리는 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() 함수를
일단 함수 사용하지 않고 출력
함수 사용하고 마지막 값 삭제하기
함수 사용하고 마지막 값만 출력하기
>특정 레벨에서의 최상위 값을 찾아주는 함수
>자신을 출력
>자신의 상위 노드까지 출력
>그 상위 노드의 상위 노드까지 출력
자기 자신만을 출력할 때
자신의 상위 노드까지 출력
따라 해 보시면 공부가 많이 되실 겁니다!!!
'데이터베이스' 카테고리의 다른 글
Oracle - DDL 명령어 (0) | 2020.09.14 |
---|---|
Oracle - Database(데이터 베이스) 개념 (0) | 2020.09.14 |
oracle-제약 조건 관리해보자! (0) | 2020.09.04 |
oracle- Constraint(제약 조건) 사용해보자! (0) | 2020.09.04 |
oracle - constraint (제약 조건) (0) | 2020.09.04 |