경진의 블로그

HIERACHICAL SELECT(계층질의) 본문

자바개발과정/오라클(Oracle)

HIERACHICAL SELECT(계층질의)

aith 2008. 5. 28. 00:12
HIERACHICAL SELECT(계층질의)

CONNECT BY …
START WITH

자료의 구조가 계층적으로 이루어진 경우 상위자료에서부터 하위자료로의 자료전개 및 하위자료에서 상위자료로의 역 전개를 위하여 사용되는 SELECT 형식이다
TDEPT를 예로 들면 자식노드의 DEPT_CODE = 부모노드의 PARENT_DEPT의 논리식이 CONNECT BY PRIOR DEPT_CODE = PARENT_DEPT로 표현된다

새로운 부서를 추가한다

INSERT INTO tdept(dept_code,dept_name,parent_dept,use_yn,area,boss_id)
         VALUES('000000','사장실',' ','Y','서울','');

UPDATE tdept
      SET parent_dept = '000000'
 WHERE dept_code = parent_dept;
 COMMIT;

LEVEL이 1이면 최상위 ROOT가 된다
ROOT이 바로 하위는 LEVEL 2가 되며 LEVEL 2를 상위 부서로 가지는 부서가 LEVEL 3이 된다

SELECT level,dept_code,dept_name
  FROM tdept
CONNECT BY PRIOR dept_code = parent_dept
START WITH dept_code = '000000';

좀 더 가시각적으로 표현위해 LPAD를 사용해 공백을 넣는다

SELECT LPAD(dept_code,level*5,' '),dept_name
  FROM tdept
CONNECT BY PRIOR dept_code = parent_dept
START WITH dept_code = '000000';

WHERE조건을 통해 제외된 행은 전개 결과에서도 해당 행만 제외되고 해당 행의 하위 행들은 제외되지 않았다

SELECT LPAD(dept_code,level*5,' '),dept_name
  FROM tdept
 WHERE dept_code <> 'CA0001'
CONNECT BY PRIOR dept_code = parent_dept
START WITH dept_code = '000000';

CONNECT BY에서 동일한 행을 제외시켰는데 해당 행을 포함한 하위의 행들이 모두 제외되었다

SELECT LPAD(dept_code,level*5,' '),dept_name
  FROM tdept
CONNECT BY PRIOR dept_code = parent_dept
    AND dept_code <> 'CA0001'
START WITH dept_code = '000000'

'자바개발과정 > 오라클(Oracle)' 카테고리의 다른 글

ROW와 COLUMN의 상호호환  (0) 2008.05.28
ROWNUM & DECODE 문제풀이  (0) 2008.05.28
HIERACHICAL SELECT(계층질의)  (0) 2008.05.28
DECODE(IF문)  (0) 2008.05.27
ROWNUM  (0) 2008.05.27
SELF JOIN  (0) 2008.05.27
0 Comments
댓글쓰기 폼