Post

[SQL] Oracle SQL 계층형 쿼리

Oracle SQL

개념

  • Oracle Database에서 사용되는 SQL 언어의 확장 버전이다.
  • 표준 SQL 기능에 추가로 고급 기능과 Oracle 특유의 확장 기능을 포함한다.

기능

  • 데이터 정의 언어(DDL), 데이터 조작 언어(DML), 데이터 제어 언어(DCL), 트랜잭션 제어 언어(TCL)
  • 파티셔닝, 복제, 대용량 데이터 처리를 위한 병렬 처리, 고급 분석 함수, 공간 및 그래프 데이터 처리 등의 고급 기능을 지원한다.
  • PL/SQL(Procedural Language/SQL)을 지원함으로써 SQL에 절차적 프로그래밍 기능을 추가하여 복잡한 비즈니스 로직을 데이터베이스 서버 내에서 실행할 수 있게 한다.

Oracle 쿼리

계층형 쿼리(CONNECT BY, START WITH)

  • 기본 개념

    • 계층적 쿼리는 데이터를 트리 구조로 표현하고자 할 때 사용된다.
      • 계층적 쿼리(Hierarchical Query): 트리 구조로 이루어진 데이터를 조회하는 쿼리
      • 트리 구조(Tree Structure): 데이터가 부모-자식 관계로 이루어진 계층적 구조
    • Oracle SQL에서는 CONNECT BYSTART WITH 절을 사용하여 이런 종류의 쿼리를 작성한다.
      • START WITH 절: 트리의 어디서 시작할지 결정한다. 보통 가장 상위의 부모 노드에서 시작한다.
      • CONNECT BY 절: 부모와 자식 간의 관계를 정의한다. PRIOR 키워드는 부모 노드를 가리키는 데 사용된다.
  • 예시(SQLD 45회 단답형 4번)

    C1C2C3
    1NULLA
    21B
    31C
    42D
    1
    2
    3
    4
    5
    
    SELECT C1, C2, C3
    FROM SQLD44
        CONNECT BY PRIOR C1 = C2
              START WITH C1 = 1
        ORDER SIBLINGS BY C1 DESC;
    
    • 계층형 쿼리 결과에서 C3의 2번째 값은? → C
      • 이 쿼리는 C1을 기준으로 계층적 구조를 만들고, 같은 부모를 가진 노드들(C3의 값)을 C1 값에 따라 내림차순으로 정렬한다. C1=1에서 시작하므로 최상위 노드는 A이다.
      • CONNECT BY PRIOR C1 = C2를 사용하여 계층을 구성한다.
        • 부모 행의 C1 값이 현재 행의 C2 값과 일치해야 한다는 뜻이다.
        • C1=2(B)와 C1=3(C)는 C1=1(A)의 자식이다.
        • C1=4(D)는 C1=2(B)의 자식이다.
      • ORDER SIBLINGS BY C1 DESC에 따라, 같은 부모를 가진 노드들은 C1 값이 큰 순서대로 정렬된다.
      • C3의 값에 따른 순서는 다음과 같다: A, C, B, D
This post is licensed under CC BY 4.0 by the author.