[sql] 계층형 쿼리(Hierarchical Query)

2024. 9. 4. 11:46·SQL
반응형

계층형 쿼리(Hierarchical Query)는 데이터베이스에서 부모-자식 관계를 가진 데이터를 조회할 때 사용하는 쿼리입니다. 주로 조직도, 파일 시스템, 제품 카테고리 등과 같이 계층 구조로 구성된 데이터를 다룰 때 유용하다.

🐲 주요 개념
부모-자식 관계: 각 데이터 항목은 부모와 자식 항목을 가질 수 있으며, 이를 통해 트리 구조를 형성한다.
루트 노드: 계층 구조의 최상위 노드를 의미한다.
Leaf 노드: 자식이 없는 노드를 의미한다.

 

🐲주요 예약어

  1. START WITH: 계층 구조의 루트 노드를 지정한다.
  2. CONNECT BY: 계층형 쿼리를 작성해 부모와 자식 간의 관계를 정의합니다. PRIOR 키워드를 사용한다.
  3. PRIOR: 이전 단계의 값을 참조하는 데 사용된다.
  4. LEVEL: 긱 노드의 깊이를 나타낸다.

계층형 쿼리를 작성하는 데는 일반적으로 CONNECT BY 절과 START WITH 절을 사용한다.

🐲 기본 구문
SELECT 데이터1,데이터2
FROM 테이블이름
START WITH 상태조건
CONNECT BY PRIOR 부모칼럼= 자식칼럼;


START WITH: 계층 구조의 시작점을 정의한다. (루트 노드)
CONNECT BY PRIOR: 부모와 자식 항목 간의 관계를 정의합니다. PRIOR 키워드는 부모 항목을 참조한다.

🐲 예시
예를 들어, 직원(Employee) 테이블이 다음과 같은 구조라고 가정한다:

EMP_ID EMP_NAME MANAGER_ID
1 Alice NULL
2 Bob  1
3 Charlie  1
4 David  2
5 Eva  2


이 테이블에서 Alice를 루트로 하는 계층형 쿼리를 작성할 수 있다.

SELECT EMP_ID, EMP_NAME, LEVEL
FROM Employee
START WITH MANAGER_ID IS NULL
CONNECT BY PRIOR EMP_ID = MANAGER_ID;

 

🐲  결과
EMP_ID   EMP_NAME   LEVEL
1                Alice                  1
2                Bob                   2
3                Charlie              2
4                David                3
5                Eva                   3
LEVEL: 각 항목의 깊이를 나타내며 루트 노드가 1, 그 다음 레벨이 2로 증가한다.

  • 계층형 쿼리는 성능에 영향을 줄 수 있으므로, 적절한 인덱스를 설정하는 것이 중요하다.
  • 무한 루프에 빠지지 않도록 데이터의 구조를 잘 관리해야 한다.
  • 계층형 쿼리는 조직도나 트리 구조의 데이터를 효과적으로 조회하는 데 매우 유용하다.


반응형

'SQL' 카테고리의 다른 글

정규화(Normalization)  (0) 2024.09.05
[SQL]WINDOW FUNCTION(윈도우 함수),분석함수(Analytic Function)  (0) 2024.09.04
[SQL] 집합 연산자(UNION, UNION ALL, INTERSECT, MINUS),INLINE VIEW  (0) 2024.09.03
[sql]JOIN, ANSI JOIN  (0) 2024.09.02
[sql] 그룹 쿼리 (group query)와 서브쿼리(sub query)  (2) 2024.09.01
'SQL' 카테고리의 다른 글
  • 정규화(Normalization)
  • [SQL]WINDOW FUNCTION(윈도우 함수),분석함수(Analytic Function)
  • [SQL] 집합 연산자(UNION, UNION ALL, INTERSECT, MINUS),INLINE VIEW
  • [sql]JOIN, ANSI JOIN
라텐느
라텐느
이제 막 개발을 시작한 초보가 개인공부를 하는 공간입니다.
  • 라텐느
    괴발개발
    라텐느
    • 개발자 (154)
      • HTML|CSS (14)
      • JAVA (29)
      • JAVACSCRIPT (15)
      • SQL (16)
      • 기타 (5)
      • JSP (2)
      • SPRING (13)
      • SPRING BOOT (6)
      • Git&GitHub (1)
      • 시행착오 (2)
      • 개발일지 (35)
        • GreenMiniProject1 (12)
        • GreenMiniProject2 (9)
        • GreenFinalProject (14)
      • Flutter (5)
      • 자격증 (0)
        • SQLD (1)
      • AWS (2)
      • Linux (1)
      • 자료구조&알고리즘 (4)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 태그
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    JS
    CSS
    java
    HTML
    부트캠프
    tag
    javascript
    SQL
    JQuery
    db
    개발자
    link
    태그
    AJAX
    자기계발
    오블완
    input
    일지
    티스토리챌린지
    링크
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
라텐느
[sql] 계층형 쿼리(Hierarchical Query)
상단으로

티스토리툴바