본문 바로가기

[DB]DataBase/[SQL]

[SQLD] 계층형 질의와 셀프 조인

728x90
반응형

계층형 질의

테이블에 계층형 데이터가 존재하는 경우 데이터를 조회하기 위해서 계층형 질의(Hierarchical Query)를 사용한다.

계층형 데이터란 동일 테이블에 계층적으로 상위와 하위 데이터가 포함된 데이터를 말한다.

예를 들어, 사원 테이블에서는 사원들 사이에 상위 사원(관리자)과 하위 사원 관계가 존재하고 조직 테이블에서는 조직들 사이에 상위 조직과 하위 조직 관계가 존재한다.

  • 하나의 테이블 내에 각 행끼리 관계를 가질 때, 연결고리를 통해 행과 행 사이의 계층(depth)을 표현하는 기법
    • 예) DEPT2에서의 부서별 상하 관계
  • PRIOR 위치에 따라 연결하는 데이터가 달라짐

계층형 질의 문장

  • START WITH 절
    • 데이터 출력 시작 조건을 지정
    • 계층 구조 전개의 시작 위치를 지정하는 구문
    • 즉 루트 데이터를 지정한다. (액세스)
  • CONNECT BY PRIOR 절
    • 행을 이어나갈 조건

PRIOR

CONNECT BY 절에 사용되며, 현재 읽은 컬럼을 지정한다.

PRIOR 자식 = 부모 형태를 사용하면 계층구조에서 부모 데이터에서 자식 데이터(부모 -> 자식) 방향으로 전개하는 순방향 전개를 한다.

그리고 PRIOR 부모 = 자식 형태를 사용하면 반대로 자식 데이터에서 부모 데이터(자식 -> 부모) 방향으로 전개하는 역방향 전개를 한다.

 

계층형 질의 가상 컬럼

  1. LEVEL
    1. 각 DEPTH를 표현 (시작점부터 1)
  2. CONNECT_BY_ISLEAF
    1. LEAF NODE (최하위 노드) 여부
    2. 참=1, 거짓=0

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

계층형 질의 가상 함수

  1. CONNECT_BY_ROOT 컬럼명
    1. 루트 노드의 해당 컬럼명 값 출력
  2. SYS_CONNECT_BY_PATH(컬럼, 구분자)
    1. 이어지는 경로 출력
  3. ORDER SIBLINGS BY 컬럼
    1. 같은 LEVEL일 경우 정렬 수행
      1. 즉 형제 노드(동일 LEVEL) 사이에서 정렬을 수행한다.

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

 

셀프 조인

셀프 조인(Self Join)이란 동일 테이블 사이의 조인을 말한다.

따라서 FROM 절에 동일 테이블이 두 번 이상 나타난다.

동일 테이블 사이의 조인을 수행하면 테이브로가 컬럼 이름이 모두 동일하기 때문에 식별을 위해 반드시 테이블 별칭(Alias)을 사용해야 한다.

SELECT ALIAS명1.칼럼명,
	   ALIAS명2.칼럼명,
       ...
FROM 테이블1 ALIAS명1,
	 테이블2 ALIAS명2
WHERE ALIAS명1.칼럼명2 = ALIAS명2.칼럼명1
;

 

 

반응형

'[DB]DataBase > [SQL]' 카테고리의 다른 글

[SQLD] 정규 표현식  (0) 2024.05.20
[SQLD] PIVOT 절과 UNPIVOT 절  (0) 2024.05.20
[SQLD] Top N 쿼리  (0) 2024.05.18
[SQLD] 윈도우 함수  (0) 2024.05.16
[SQLD] 그룹 함수  (0) 2024.05.09