Coding Planet
[SQLD] 노랭이 87번 풀이 - START WITH...CONNECT BY PRIOR 본문
반응형
| START WITH ... CONNECT BY
Oracle SQL에서 계층적 데이터를 쿼리하는데 사용되는 구문이다. 이 구문을 사용하면 트리 또는 그래프와 같은 계층적인 관계를 가진 데이터들을 쉽게 쿼리할 수 있다.
1. START WITH:
- 계층 구조의 시작점을 지정한다.
- 만약 부모가 없는 노드(루트 노드)를 시작점으로 선택하려면 'START WITH parent_colum IS NULL'을 사용한다.
2. CONNECT BY:
- 부모와 자식 간의 관계를 지정한다.
- PRIOR 키워드는 이전 레벨의 컬럼의 참조한다.
- CONNECT BY PRIOR child_column = parent_column은 child_column의 값이 현재 행의 값이고, parent_colum의 값이 부모행인 값인 행을 찾는다.
3. PRIOR:
- 현재 레벨의 컬럼 값을 이전 레벨의 값과 비교하는 데 사용된다.
- PRIOR 자식 = 부모 : 계층구조에서 부모데이터에서 자식데이터 방향으로 전개하는 순방향 전개
- PRIOR 부모 = 자식 : 반대로 자식 데이터에서 부모데이터방향으로 전개하는 역방향 전개
4. ORDER SIBLINGS BY:
- 같은 계층 레벨의 행을 정렬하는 데 사용된다.
| 예제
예를 들어, 각 직원의 매니저와의 관계를 나타내는 테이블이 있다고 가정하자.
EMP_ID | EMP_NAME | MGR_ID
-------|----------|-------
1 | John | NULL
2 | Mike | 1
3 | Sara | 1
4 | David | 2
이 테이블에서 John은 매니저가 없고, Mike와 Sara는 John의 직원, David는 Mike의 직원이다.
이 관계를 쿼리하려면 다음과 같이 작성할 수 있다. -- 2024/09/04 수정
SELECT EMP_NAME
FROM EMPLOYEES
START WITH MGR_ID IS NULL -- 매니저가 없는 경우 == 최상위 직위 == ROOT NODE
CONNECT BY PRIOR EMP_ID = MGR_ID
ORDER SIBLINGS BY EMP_NAME;
--결과
EMP_NAME
--------
John
Mike
Sara
David
| Q66 - 계층형 쿼리
C1 | C2 | C3
-------------
1 | | A
2 | 1 | B
3 | 1 | C
4 | 2 | D
--실행할 쿼리
SELECT C3
FROM TAB1
START WITH C2 IS NULL
CONNECT BY PRIOR C1 =C2
ORDER SIBLINGS BY C3 DESC
- START WITH C2 IS NULL : C2 값이 NULL인 행에서 시작한다. C1= 1, C3=A인 행이다.
- CONNECT BY PRIOR C1 = C2 : 현재 행의 C1 값이 다음 행의 C2값과 일치하는 행을 찾는다.
- ORDER SIBLINGS BY C3 DESC : 같은 부모를 가진행(같은 계층)을 C3 값에 따라 내림차 순으로 정렬한다.
C3
---
A
C
B
D
따라서 두번째 표시될 값은 C이다.
반응형
'DB, SQL' 카테고리의 다른 글
[SQLD] 윈도우 함수(Window Function) - 자주 사용하는 함수 모음 (0) | 2023.09.05 |
---|---|
[SQLD]빈출 서브쿼리, 집합연산자, 합계 연산자 총정리(예시포함) (0) | 2023.09.05 |
[SQLD] 노랭이 66번 풀이 - EXISTS, NOT EXISTS, RIGHT OUTER JOIN, LEFT OUTER JOIN (0) | 2023.09.03 |
[SQLD] 단일행 NULL관련 함수들(NVL, ISNULL, NULLIF, COALESCE) (0) | 2023.09.03 |
[SQLD] CASE 표현식 : SEARCHED CASE와 SIMPLE CASE - 노랭이 43번 (0) | 2023.09.01 |
Comments