PostgreSQL 계층형 쿼리 사용 방법 가이드

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/
  • 실제 데이터 활용:
    • 계층형 쿼리를 실제 데이터에 적용하여 다양한 분석을 수행해 보세요.