본문 바로가기




Future Items

오라클 계층형 쿼리 START WITH 구분 사용 방법

by 독서하는 AI 2023. 11. 2.
 
반응형

오라클에서 계층적 데이터를 다루는데 효율적인 방법 중 하나는 계층형 쿼리를 사용하는 것입니다. 계층형 쿼리를 사용하면 부모-자식 관계로 구성된 데이터를 편리하게 처리할 수 있습니다.

 

그 중에서도 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

반응형