1. 계층형 쿼리란 무엇인가?
계층형 쿼리는 부모-자식 관계를 가진 데이터를 효율적으로 조회하는 SQL 쿼리입니다. 조직 구조, 파일 시스템, 제품 카테고리 등 다양한 분야에서 활용됩니다. PostgreSQL은 WITH RECURSIVE
구문을 사용하여 간편하게 계층형 쿼리를 작성할 수 있습니다.
2. 계층형 쿼리 작성 방법
2.1. WITH RECURSIVE
구문 사용:
WITH RECURSIVE
구문을 사용하여 재귀적인 쿼리를 정의합니다.- 쿼리는 기본 쿼리와 재귀 쿼리로 구성됩니다.
- 기본 쿼리는 트리의 시작 노드를 선택합니다.
- 재귀 쿼리는 트리의 하위 노드를 선택합니다.
2.2. 예시:
WITH RECURSIVE employee_tree (
id,
name,
parent_id,
level
) AS (
# 기본 쿼리: 최상위 직원 선택
SELECT
id,
name,
parent_id,
1 AS level
FROM
employees
WHERE
parent_id IS NULL
# 재귀 쿼리: 하위 직원 선택
UNION ALL
SELECT
e.id,
e.name,
e.parent_id,
t.level + 1 AS level
FROM
employees e
JOIN
employee_tree t ON e.parent_id = t.id
)
SELECT
*
FROM
employee_tree
2.3. CONNECT BY
구문 사용:
- Oracle에서 주로 사용되는 구문입니다.
- PostgreSQL에서도
plpgsql
확장을 사용하여 사용 가능합니다.
3. 계층형 쿼리 활용 예시
- 조직 구조:
- 특정 부서의 모든 직원 목록 조회
- 직원의 상사 및 하위 직원 조회
- 부서별 직원 수 통계
- 파일 시스템:
- 특정 폴더의 모든 하위 폴더 및 파일 목록 조회
- 파일의 경로 조회
- 파일 크기별 통계
- 제품 카테고리:
- 특정 카테고리의 모든 하위 카테고리 목록 조회
- 제품의 카테고리 경로 조회
- 카테고리별 제품 수 통계
- XML/JSON 데이터:
- 계층 구조 데이터 조회 및 변환
- 특정 요소의 하위 요소 추출
- 데이터 구조 분석
4. 주의 사항
- 무한 루프 발생 가능성:
CYCLE
컬럼 사용으로 방지- 쿼리 조건을 명확하게 정의
- 성능 최적화:
- 적절한 인덱스 사용
- 쿼리 계획 확인
- 보안:
- 계층형 쿼리는 모든 데이터에 접근할 수 있으므로 권한 관리에 주의
5. 추가 정보
- 시각화:
- 계층형 데이터를 시각화하는 도구를 활용하면 데이터 구조를 이해하는데 도움이 됩니다.
- 예시: https://graphviz.org/
- 성능 최적화:
- 쿼리 계획을 분석하여 성능 저하의 원인을 파악하고 개선할 수 있습니다.
- 예시: https://explain.depesz.com/
- 실제 데이터 활용:
- 계층형 쿼리를 실제 데이터에 적용하여 다양한 분석을 수행해 보세요.