SQL - 계층형 질의와 셀프조인

박현·2022년 10월 25일
0

SQL

목록 보기
25/34

개요

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

  • 계층형 데이터란?
    : 동일 테이블에 계층적으로 상위와 하위 데이터가 포함된 데이터를 말한다.
    엔터티를 순환관계데이터모델로 설계할 경우 계층형 데이터가 발생한다.
    순환관계데이터모델의 예로는 조직, 사원, 메뉴등이있다.

셀프 조인

: 동일 테이블 사이의 조인을 말한다. 따라서 FROM절에 동일 테이블이 두번 이상 나타난다.
동일 테이블 사이의 조인을 수행하면 테이블과 컬럼 이름이 모두 동일하므로 식별을 위해 반드시 테이블 별칭(Alias)을 사용해야 한다. 컬럼에도 모두 테이블 별칭을 사용해서 어느 테이블의 컬럼인지 식별해줘야 한다.

  • 셀프조인 기본 문법
SELECT ALIAS1.컬럼명
	  ,ALIAS2.컬럼명
 FROM 테이블1 ALIAS1, 테이블2 ALIAS2
WHERE ALIAS2.컬럼명 = ALIAS1.컬럼명;

JONES의 자식 노드를 출력

입력✏️

SELECT B.EMPNO
 	  , B.ENAME
      , B.MGR
 FROM EMP A
INNER JOIN EMP B
ON A.EMPNO = B.MGR
WHERE A.ENAME = 'JONES';

출력🖥️


계층형 질의

: 계층형 데이터 조회는 DBMS벤더와 버전에 따라 다른방법으로 지원한다.

1. Oracle 계층형 질의

Oracle은 계층형 질의를 지원하기 위해서 아래와 같은 계층형 질의 구문을 제공한다.

  • START WITH
    : 계층 구조 전개의 시작 위치를 지정하는 구문이다. 즉 루트데이터를 지정한다.

  • CONNECT BY
    : 다음에 전개될 자식 데이터를 지정하는 구문이다. 자식데이터는 CONNECT BY절에 주어진 조건을 만족해야한다.

  • PRIOR
    : CONNECT BY절에 사용되며, 현재 읽은 컬럼을 지정한다.
    (FK) = PRIOR = (PK) 형태를 사용하면 부모 -> 자식 방향으로 전개하는 순방향 전개를 한다.
    (PK) = PRIOR = (FK) 형태를 사용하면 자식 -> 부모 방향으로 전개하는 역방향 전개를 한다.

  • NOCYCLE
    : 데이터를 전개하면서 이미 나타났던 동일한 데이터가 전개중에 다시 나타나면 이것을 사이클이 발생했다고 하는데 이때 런타임 오류가 발생하게된다. NOCYCLE를 추가하면 오류를 발생시키지 않고 사이클이 발생한 이후의 데이터를 전개하지 않는다.

  • ORDER SIBLINGS BY
    : 형제 노드 사이에서 정렬을 수행한다.

  • WHERE
    : 모든 전개를 수행한 후에 지정된 조건을 만족하는 데이터만 추출한다.

  • 계층형 질의에서 사용되는 가상 컬럼
  • Oracle은 계층형 질의를 사용할 때 사용자 편의성을 제공하기 위해서 아래와 같은 함수를 제공한다.

0개의 댓글