본문 바로가기
개발공부 일지/오라클

오라클)계층형 쿼리 CONNECT BY PRIOR , ORDER SIBLINGS BY

by Box Cat 2024. 10. 29.
728x90
반응형

 

 오라클의 CONNECT BY 절은 부서 조직도, 메뉴 트리 와 같은 계층 쿼리를 만들 때 사용됩니다. 그리고 CONNECT BY 절과 LEVEL을 사용하면 순차적인 데이터를 생성할 수가 있습니다..

 

 

*

CONNECT BY PRIOR 컬럼A = 컬럼B

이전 컬럼A 값이 현재 컬럼B 값과 같은 것을 찾으라는 뜻입니다.

-->

CONNECT BY PRIOR 컬럼A의 이전값 = 컬럼B의 현재값

입니다.

 

그래서 저는 외울 때, 

CONNECT BY PRIOR 이전값 = 현재값

이라고 외웁니다.

 

 

 

Ex)

 

SELECT 
*
FROM EMPLOYEES
ORDER BY EMPLOYEE_ID;

 

 


SELECT
 EMPLOYEE_ID
 , LPAD(' ',LEVEL*2) || FIRST_NAME || LAST_NAME AS FULL_NAME
 , MANAGER_ID
 , LEVEL
FROM EMPLOYEES
START WITH MANAGER_ID IS NULL -- 계층을 시작할 위치 (  MANAGER_ID 컬럼이 NULL 인 것으로 시작해라)

--START WITH EMPLOYEE_ID = '100' 으로 바꿔도 결괏값은 같습니다.
CONNECT BY PRIOR EMPLOYEE_ID /*이전값*/  MANAGER_ID /*현재값*/

--> 이전의 EMPLOYEE_ID 컬럼값과 현재의 컬럼 MANAGER_ID 컬럼값이 같은 것을 찾아라!
;

 

 

 

 

*ORDER SIBLINGS BY 컬럼A  ASC / DESC 

: '같은  레벨일 때, 컬럼A를 기준으로 정렬해라' 라는 뜻입니다.

 

 

SELECT
 EMPLOYEE_ID
 , LPAD(' ',LEVEL*2) || FIRST_NAME || LAST_NAME AS FULL_NAME
 , MANAGER_ID
 , LEVEL
FROM EMPLOYEES
START WITH MANAGER_ID IS NULL
CONNECT BY PRIOR EMPLOYEE_ID = MANAGER_ID 
ORDER SIBLINGS BY EMPLOYEE_ID DESC  
; --> 같은 레벨일 때, EMPLOYEE_ID 컬럼을 기준으로 DESC 정렬해라.

 

 

 

참고

https://www.youtube.com/watch?v=boNut__USIU

 

 
 
728x90
반응형

댓글