728x90
반응형
계층형 질의

 

  • 계층형 데이터: 동일 테이블에 계층적으로 상/하위 데이터가 포함된 데이터
  • 테이블에 계층형 데이터가 존재하는 경우 데이터를 조회하기 위해 사용
  • 엔터티를 순환관계 데이터 모델로 설계할 경우 계층형 데이터 발생 (조직, 사원, 메뉴 등)

  •  Oracle 계층형 질의
SELECT ...
FROM 테이블
WHERE condition AND condition
START WITH condition
CONNECT BY [NOCYCLE] condition AND condition ...
[ORDER SIBLINGS BY column, column, ...]

- 계층형 질의에서 사용되는 가상 칼럼

가상 칼럼 설명
LEVEL 루트 데이터이면 1, 그 하위이면 2이다.
리프(Leaf) 데이터까지 1씩 증가한다.
CONNECT_BY_ISLEAF 전개 과정에서 해당 데이터가 리프 데이터이면1, 그렇지 않으면 0이다.
CONNECT_BY_ISCYCLE 전개 과정에서 자식을 갖는데, 해당 데이터가 조상으로 존재하면 1, 그렇지 않으면 0이다.
여기서 조상이란 자신으로부터 루트까지의 경로에 존재하는 데이터를 말한다.
CYCLE 옵션을 사용했을 때만 사용할 수 있다.

 

  • START WITH절: 레벨의 시작
  • CONNECT BY절: 그 다음에 자식 레벨 지정 (이때 CONNECT BY절의 조건을 만족해야 됨)
  • PRIOR 자식 = 부모: [부모→자식]으로 순방향 전개, 리프 = 1
  • PRIOR 부모 = 자식: [자식→부모]으로 역방향 전개, 루트 = 1
  • ORDER SIBLINGS BY: 형제 NODE 위치를 바꿈
  • NOCYCLE: 이미 나타난 동일한 데이터가 전개 중에 다시 나타나면  이것을 CYCLE 형성이라고 함.
    사이클 발생한 데이터는 런타임 오류 발생 → NOCYCLE 추가 → 사이클 발생 이후 데이터는 전개하지 않는다.

 

- 계층형 질의에서 사용되는 함수

함수 설명
SYS_CONNECT_BY_PATH 루트 데이터로부터 현재 전개할 데이터까지의 경로를 표시한다.
사용법 : SYS_CONNECT_BY_PATH(칼럼, 경로분리자)
CONNECT_BY_ROOT 현재 전개할 데이터의 루트 데이터를 표시한다. 단항 연산자이다.
사용법 : CONNECT_BY_ROOT 칼럼

 

  • SQL Server 계층형 질의
    • CTE(Common Table Expression)로 재귀 호출하여 상위부터 하위 방향 전개
WITH 테이블명_ANCHOR AS
(SELECT 하위칼럼명, 칼럼명, 상위칼럼명, 0 AS LEVEL
FROM 테이블명
WHERE 상위칼럼명 IS NULL /* 재귀 호출의 시작점 */
UNION ALL
SELECT R.칼럼명, R.칼럼명, R.계층칼럼며으 A.LEVEL + 1
FROM 테이블명_ANCHR A, 테이블명 R
WHERE A.하위칼럼 = R.상위칼럼)
728x90
반응형

'Language > RDBMS' 카테고리의 다른 글

조인 수행원리  (0) 2023.03.19
옵티마이저와 실행계획  (0) 2023.03.19
[SQLD]Prev-Exam Solving (30st)  (0) 2023.03.15
[SQLD]Prev-Exam Solving (21st)  (0) 2023.03.15
SQL 함수  (0) 2023.03.08

+ Recent posts