데이터베이스

데이터베이스_SQL기본(계층형 쿼리)_예제_ 22.06.27(day06)

양빵빵 2022. 6. 27. 13:47

 

-- ========
-- 계층형 쿼리
-- START WITH : 계층의 첫 단계를 어디서 시작할 것인지 대한 조건
-- CONNECT BY : 전계방향을 어디로 짤 것인가
  -- [ 부모에서 자식으로 전개 : 순방향 탐색 // 자식에서 부모로 : 역방향 탐색 ]
  -- CONNECT BY PRIOR 자식 = 부모 -> 순방향 탐색
  -- CNONECT BY 자식 = PRIOOR 부모 -> 역방향 탐색
  
  -- ORDER SILBINGS BY : 같은 레벨끼리의 정렬을 정함.
  -- EX) 형제들 끼리는 사번 내림차로 정렬하고 싶다.

SELECT 
    LEVEL AS LVL,
    LPAD(' ', 44*(LEVEL-1)) || emp_no || '(' || emp_nm || ')' AS "조직인원",
    A.dept_cd,
    B.dept_nm,
    A.emp_no,
    A.direct_manager_emp_no,
    CONNECT_BY_ISLEAF
FROM tb_emp A
JOIN tb_dept B
ON A.dept_cd = B.dept_cd
START WITH A.direct_manager_emp_no IS NULL
CONNECT BY PRIOR A.emp_no = A.direct_manager_emp_no
ORDER SIBLINGS BY A.emp_no DESC;




SELECT 
    LEVEL AS LVL,
    LPAD(' ', 4*(LEVEL-1)) || emp_no || '(' || emp_nm || ')' AS "조직인원",
    A.dept_cd,
    B.dept_nm,
    A.emp_no,
    a.direct_manager_emp_no
FROM tb_emp A
JOIN tb_dept B
ON A.dept_cd = B.dept_cd
START WITH A.emp_no = '1000000037'
CONNECT BY A.emp_no = PRIOR A.direct_manager_emp_no;