오라클의 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
'개발공부 일지 > 오라클' 카테고리의 다른 글
오라클) Concatenation Operator (USE_CONCAT 힌트) (0) | 2024.09.01 |
---|---|
오라클) 실행계획에서 VIEW Operator - 뷰 연산자 (0) | 2024.09.01 |
오라클) INSERT ALL 구문 - Pivoting Insert(피봇) (0) | 2024.08.26 |
오라클) 윈도우 함수(Window Function)의 FIRST_VALUE(), LAST_VALUE() 예시 (0) | 2024.08.26 |
오라클) 윈도우 함수(Window Function)의 Interval 키워드 사용법 (0) | 2024.08.26 |
댓글