오라클에서 계층적 데이터를 다루는데 효율적인 방법 중 하나는 계층형 쿼리를 사용하는 것입니다. 계층형 쿼리를 사용하면 부모-자식 관계로 구성된 데이터를 편리하게 처리할 수 있습니다.
그 중에서도 START WITH 구분을 사용하면 원하는 계층 구조를 정의하여 쿼리를 작성할 수 있습니다.
START WITH 구분
START WITH는 계층 구조의 시작을 정의하는데 사용됩니다. 계층 쿼리를 작성할 때 어느 노드에서부터 계층을 시작할지를 START WITH 구분으로 지정할 수 있습니다.
예를 들어, 부서 테이블에서 부서와 부서 사이의 상하위 관계를 표현한 부모 부서 ID를 가진 열이 있다고 가정해보겠습니다. 이때 START WITH 구분을 사용하여 계층 구조를 시작하는 부서를 지정할 수 있습니다.
```sql SELECT * FROM 부서 START WITH 부서_ID = 'A001' CONNECT BY PRIOR 부서_ID = 상위_부서_ID; ```
위의 예제에서는 'A001'이라는 부서를 시작으로 계층 구조를 정의합니다.
CONNECT BY PRIOR를 사용하여 현재 행과 이전 행을 조인하는 방식으로 계층적 쿼리를 작성할 수 있습니다.
START WITH 구분 사용 예제
실제 예제를 통해 START WITH 구분을 사용하는 방법을 알아보겠습니다. 다음과 같은 부서 테이블이 있다고 가정해보겠습니다.
부서_ID | 부서명 | 상위_부서_ID |
A001 | 총무부 | null |
B001 | 인사팀 | A001 |
C001 | 재무팀 | A001 |
D001 | 영업팀 | A001 |
E001 | 기획팀 | B001 |
E002 | 마케팅팀 | B001 |
F001 | 영업1팀 | D001 |
F002 | 영업2팀 | D001 |
위의 테이블을 사용하여 계층 구조를 조회하는 쿼리를 작성해보겠습니다.
```sql SELECT * FROM 부서 START WITH 상위_부서_ID IS NULL CONNECT BY PRIOR 부서_ID = 상위_부서_ID; ```
위의 쿼리에서는 START WITH 구분으로 상위_부서_ID가 NULL인 부서를 시작으로 계층 구조를 정의합니다. 그리고 CONNECT BY PRIOR를 사용하여 현재 행과 이전 행을 조인하여 계층을 구성합니다.
실행 결과는 다음과 같습니다.
부서_ID | 부서명 | 상위_부서_ID |
A001 | 총무부 | null |
B001 | 인사팀 | A001 |
E001 | 기획팀 | B001 |
E002 | 마케팅팀 | B001 |
C001 | 재무팀 | A001 |
D001 | 영업팀 | A001 |
F001 | 영업1팀 | D001 |
F002 | 영업2팀 | D001 |
위의 결과에서는 'A001' 부서를 시작으로 총무부, 인사팀, 기획팀, 마케팅팀, 재무팀, 영업팀, 영업1팀, 영업2팀 순서로 계층 구조가 나타나는 것을 확인할 수 있습니다.
결론
오라클의 계층형 쿼리를 사용하여 계층 구조를 다루는 방법에 대해 알아보았습니다. START WITH 구분을 사용하여 계층 구조의 시작을 정의하고 CONNECT BY PRIOR를 사용하여 계층적인 쿼리를 작성할 수 있습니다. 계층 구조를 다룰 때 유용한 이러한 기능을 활용하면 데이터의 계층적인 관계를 효과적으로 다룰 수 있습니다.
더 많은 정보를 원하시면 오라클 공식 문서를 참조해보시기 바랍니다.
참고 링크: https://docs.oracle.com/cd/B28359_01/server.111/b28286/queries003.htm#i2064187
'Future Items' 카테고리의 다른 글
오라클 CONNECT BY LEVEL을 활용한 날짜 조회 방법 (0) | 2023.11.02 |
---|---|
오라클 CONNECT BY LEVEL 사용 방법 (0) | 2023.11.02 |
오라클 계층형 쿼리 최상위 찾는 방법 (0) | 2023.11.02 |
오라클 계층형 쿼리 부모 찾기 방법 (0) | 2023.11.02 |
엑셀 피벗테이블 부분합 제거하는 방법 (0) | 2023.11.01 |