작업했던 화면 : 관리자 > 관리자 그룹 권한 > 관리자 현황 > 관리자 등록(1/2)
관리자 정보를 조회, 등록하는 화면을 만들 때, 부서별로 조회 할 필요가 있었다.
selfJoin을 했을 때 원하는대로 조회도 잘 안 되고 막막했다.
selfJoin으로 무식하게 했었는데…이런 방법이 있었던 것이다.
근데 계층형 쿼리(Hierarchical Query)는 오라클에서만 지원한다고 한다.
WITH ORG AS ( SELECT LEVEL LV , CONNECT_BY_ROOT ORG_CD AS ROOT_ID , ORG_CD , SUPER_ORG_CD , ORG_NM , SQ , CONNECT_BY_ISLEAF AS ISLEAF FROM TBBDDT01 A WHERE 1=1 START WITH SUPER_ORG_CD = @ORG_CD // 루트 노드 지정 CONNECT BY PRIOR ORG_CD = SUPER_ORG_CD. // 자식-부모 관계 연결 ORDER SIBLINGS BY SQ ) SELECT B.EMP_NO , B.EMP_NM , B.IN_OFFI_YN , B.POS_GRD_CD , B.POS_GRD_NM , B.POS_CD , B.POS_NM , A.SUPER_ORG_CD , B.ORG_CD , A.ORG_NM , B.HIRE_YMD , B.RETIRE_YMD , B.LAST_LDN_DTTM , B.DATA_LDN_YMD , B.CDC_DATE , B.CDC_PRC_GB , CASE WHEN C.USER_ID IS NOT NULL THEN ‘Y’ ELSE ‘N’ END AS IS_REGIED FROM ORG A INNER JOIN TBBDDT02 B ON A.ORG_CD = B.ORG_CD LEFT OUTER JOIN TBBDAA03 C ON C.USER_ID = B.EMP_NO WHERE B.EMP_NO NOT IN ( SELECT NVL(USER_EMP, ‘0’) FROM TBBDAA03 )
출처 : [오라클] 계층형 쿼리 ( START WITH ... CONNECT BY )|작성자 자바킹
노드(node) : 위 그림에서 원모양으로 표시된 항목을 노드라고 한다. 각각의 품목이 하나의 노드가 되며 실제 테이블에서는 하나의 로우에 대응
부모(parent) : 부모노드라고도 한다. 즉 트리구조에서 상위에 있는 노드를 말한다.
자식(child) : 자식노드라고도 한다. 위 그림에서 '모니터'는 컴퓨터의 자식노드이며, 컴퓨터는 모니터와 본체의 부모노드가 된다.
리프(leaf) : 리프노드라고도 한다. 더이상 하위에 연결된 노드가 없는 항목을 말한다. 즉 자식노드가 없는 노드라고 할수있으며 모니터, 프린터, 랜카드가 이에 해당된다.
루트(root) : 계층형, 트리구조에서 최상위에 있는 노드를 말한다. 컴퓨터가 이에 해당
레벨(level) : 트리구조에서의 각각의 계층을 말한다. 루트에 해당되는 '컴퓨터'가 1레벨이 되며, 순차적으로 그 하위에 있는 '모니터', '본체' 등이 2레벨이 된다.
START WITH 조건1 : 루트노드를 식별한다. 조건1을 만족하는 모든 ROW 들은 루트노드가 된다.
START WITH절을 생략할수도 있는데 이러한 경우 모든 ROW들을 루트노드로 간주한다. 조건1에는 서브쿼리도 올수있다.
레벨 의사컬럼(LEVEL Pseudocolumn)
계층형 정보를 표현할 때 레벨을 나타낸다.
LEVEL도 일반적인 컬럼 처럼 SELECT, WHERE, ORDER BY 절에서 사용할수있다.