본문 바로가기
Data Analysis/SQL

[SQL] 10. SQL에서의 반복 (응용 - 재귀 쿼리)

by Dlearner 2019. 7. 18.
반응형

SQL에서의 '반복'(반복문X) - 재귀 쿼리(Recursive Union)

앞선 포스팅에 이어 SQL에서의 반복에 관한 세번째 예시를 소개하려 한다.

이번 예시에서는 재귀 쿼리(Recursive Union)라는 여태까지의 SELECT 구문과는 색다른 구문이 등장한다.

 

 

 

[ Example 3 - 우편번호 이력 테이블 ]

 이사 이력이 있는 사람들의 우편번호 기록이 적재되어 있는 PostalHistory 테이블을 생성하였다.

 

- PostalHistory 테이블 생성 -

 

new_pcode는 name에 해당하는 사람이 이사한 곳의 우편번호를 뜻하며, pcode는 과거 거주한 집의 우편번호를 뜻한다. 만일 new_pcode의 값이 NULL이라면, pcode가 name에 해당하는 사람의 최종 거주지 우편번호인 셈이다.

 

 

 

 

- 포인터 체인 & 인접 리스트 모델

 위의 예시처럼, 우체국에서는 오래된 주소로 보내진 우편물을 새로운 주소로 전달하기 위해 위와 같은 방식으로 이력 관리를 한다고 한다. 이렇게 우편번호를 키로 삼아 데이터를 줄줄이 연결한 것을 "포인터 체인"이라 부른다. 또한, 포인터 체인을 활용하여 만든 PostalHistory 같은 테이블 형식을 "인접 리스트 모델"이라고 부른다.

 

 

- 포인터 체인을 사용한 인접 리스트 모델 구조 -

 

 

 

 

- 재귀 공통 테이블 식(Recursion common table expression)

SQL에서 위의 예시와 같은 계층 구조를 찾는 방법 중 하나가 바로 재귀 공통 테이블식(Recursion common table expression)이다.

 

아래의 식은 Oracle에서 제공하는 재귀 공통 테이블 식으로 "A"의 가장 오래된 주소의 우편번호를 검색한 쿼리이다.

(쿼리 자체가 약간 복잡하므로, 읽고 이해하는 수준에서 넘어가도록 한다.)

 

- 재귀 쿼리(Recursion Union)을 활용한 반복 쿼리 -

반응형

댓글