- 부모와 자식의 관계처럼 계층적 구조의 자료를 하나의 엔터티 내에 구조화 하여 기술한 구조

- BOM 구조를 하나의 테이블에 구조화 시킴.

- 저장공간의 낭비를 막을 수 있으며, 불필요한 작업을 감소시킬수 있다.

 

SELECT EMPNO

           , MGR

   FROM EMP

 WHERE SAL > 1000                                    --> CHECK조건

CONNECT BY PRIOR EMPNO = 'mgr'            --> JOIN 조건

 START WITH MGR IS NULL                         --> DRIVING 조건

;

 

- where 절이 처리범위를 줄여주는 선행조건이 아니다. 단지 체크조건으로 결과  추출전에 데이터를 걸러주는 역할만 한다.

- 선행처리 조건은 Start with 절이다. 시작점은 Start With 절이 선행조건으로 수행되는 것이고, 성능의 중요한 키이다.

 인덱스는 Start With절에 만들어야 한다. where절이 선행조건이라 생각하고 인덱스를 where에 만들면 성능이 저하된다.

- Prior 절

Connect by Prior a = b

Prior은 반대편이나 select 절에 기술해도 상관없다.

최초 시작한 노드의 Prior 다음에 기술되는 칼럼을 읽어 Prior절 반대편에  칼럼에 상수로 제공하겠다는 의미.

그러므로 prior 반대편 칼럼에 인덱스를 생성하면 빠른 성능을 볼수 있다.

 

 

제한사항>

- 순환구조내에서는 join이 불가능하므로, 다른 테이블과 join을 하기 위해서는 순환구조를 가지는 문장을 In Line View로 처리한 후 join 해야 한다.

- 반복이 발생할수 있다. 무한 루프가 발생할수 있다.

  모든 데이터의 부모데이터가 항상 존재하지 않는다.

 

 

* connect by절을 이용해 sql문장을 수행할 경우 순환구조로 된 데이터에 대한 order by가 수행되지 않는다.

에러 없이 수행은 되지만 원하는 결과는 출력되지 않는다. oracle9i부터는 order siblings by문장을 기술하고 수행하면 원하는 데이터 추출할수 있다.

 

 

 

'DBMS > 오라클기타' 카테고리의 다른 글

오라클 행을 열로  (0) 2014.12.17
다중 update  (0) 2014.12.17
25가지 SQL작성법  (0) 2013.06.09
테이블 정보 query  (0) 2013.06.06
trigger  (0) 2013.06.04

+ Recent posts