관리 메뉴

SIMPLE & UNIQUE

오라클 START WITH ~ CONNECT BY PRIOR 본문

카테고리 없음

오라클 START WITH ~ CONNECT BY PRIOR

착한코딩 2017. 4. 4. 11:50

 START WITH ~ CONNECT BY PRIOR


  • 예문

SELECT *

   FROM employee A

CONNECT BY PRIOR A.emp_id = A.manager_emp_id

             AND A.emp_id <> '1002'

             START WITH A.emp_id = '1001'

             AND EX_YN = 'Y'


  • START WITH는 처음 시작할 조건을 의미
    즉,  emp_id='1001' 이면서 ex_yn='Y'인 로우부터 출발한다.
  • CONNECT BY는 위의 데이터와 연결된 로우를 반복하여 찾는다.
  • EMP_ID ('1001')를 manager_emp_id 로 갖는 로우를 찾는다.

CONNECT BY와 START WITH의 순서는 의미없다.

CONNECT BY 다음의 AND 는 순환 관계를 푼다.

 AND 조건을 만족하지 않으면 그 다음 레벨은 더 이상 진행하지 않음을 의미.


 SELECT *

    FROM employee A

CONNECT BY PRIOR A.emp_id = A.manager_emp_id

             AND A.emp_id <> '1002'

             START WITH A.emp_id = '1001'

             AND EX_YN = 'Y'

; -- '1001'의 하위인 '1002'가 AND 조건에 맞지 않으므로 '1002'의 하위인 '1007','1009'는 조회되지 않는다.


결과


EMP_ID MANAGER_EMP_ID EX_YN

1001 1000 Y

1003 1001 Y

1010 1003 Y

1008 1001 Y



FROM 절 다음의 WHERE는 순환구조를 모두 전개 한 후에 조건에 해당하는 로우만 츨력


 SELECT *

   FROM employee A

  WHERE A.emp_id <> '1002'

CONNECT BY PRIOR A.emp_id = A.manager_emp_id

  START WITH A.emp_id = '1001'

    AND EX_YN = 'Y'

; -- '1002'의 하위인 '1007','1009'를 전개 한 후 emp_id='1002'만 걸러냄.


결과


EMP_ID MANAGER_EMP_ID EX_YN

1001 1000 Y

1007 1002 Y

1009 1002 Y

1003 1001 Y

1010 1003 Y

1008 1001 Y


출처 : http://c36wn.egloos.com/4350031

출처: http://joke00.tistory.com/89 [Smile virus]





Comments