Preloader image
DDD

데이터베이스

오라클 - 재귀쿼리 ("감자"가 포함된 부서를 찾고, 해당 부서의 상위·하위 부서를 모두 출력하는 SQL 쿼리)

작성자 관리자 (admin)
조회수 667
입력일 2025-03-14 23:28:53

"감자"가 포함된 부서를 찾고, 해당 부서의 상위·하위 부서를 모두 출력하는 SQL 쿼리
즉, "감자"라는 단어가 포함된 부서뿐만 아니라, 그 부서의 상위 부서와 하위 부서까지 함께 출력하는 방법입니다.

1. CONNECT BY를 활용한 방법 (오라클 계층 쿼리)

SELECT DISTINCT 
        DEPT_ID
      , KRN_DEPT_NM
      , UPPR_DEPT_ID
      , SCRN_INDCT_SEQNO
  FROM TB_CI_DEPT_BSC
 START WITH DEPT_ID IN (
 -- "감자"가 포함된 부서를 찾음
       SELECT DEPT_ID
         FROM TB_CI_DEPT_BSC
        WHERE UPPER(KRN_DEPT_NM) LIKE '%' || UPPER('감자') || '%'
       )
CONNECT BY NOCYCLE
       DEPT_ID = PRIOR UPPR_DEPT_ID -- 상위 부서 찾기
    OR UPPR_DEPT_ID = PRIOR DEPT_ID -- 하위 부서 찾기
 ORDER BY UPPR_DEPT_ID NULLS FIRST, SCRN_INDCT_SEQNO NULLS FIRST

;

설명

  1. "감자"라는 단어가 포함된 부서를 먼저 찾음.
  2. 해당 부서의 상위 부서를 찾음 (DEPT_ID = PRIOR UPPR_DEPT_ID)
  3. 해당 부서의 하위 부서를 찾음 (UPPR_DEPT_ID = PRIOR DEPT_ID)
  4. 결과를 SCRN_INDCT_SEQNO 기준으로 정렬.

-- 예제 데이터 및 결과

예제 데이터

DEPT_ID KRN_DEPT_NM UPPR_DEPT_ID
1001 경영지원부 NULL
1002 인사팀 1001
1003 감자연구소 1001
1004 감자마케팅팀 1003
1005 탈출영업팀 1004
1006 전략기획팀 1001

"감자" 검색 시 기대 결과

DEPT_ID KRN_DEPT_NM UPPR_DEPT_ID
1001 경영지원부 NULL
1003 감자연구소 1001
1004 감자마케팅팀 1003
1005 탈출영업팀 1004

결과는 "감자"가 포함된 부서(1003)와 그 부서의 상위·하위 부서가 함께 출력됩니다!