[SQLD] 계층형 질의

younghyun·2023년 6월 7일
0

SQLD

목록 보기
9/18
  • 테이블에 계층형 데이터 존재 시 데이터를 조회하기 위해 계층형 질의 사용
  • 계층형 데이터는 동일 테이블에 계층적으로 상위와 하위 데이터가 포함된 데이터

오라클 계층형 질의

  • 계층형 쿼리: 부모, 자식 간의 수직관계를 트리 구조 형태로 보여주는 쿼리

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

  • CONNECT BY: 다음에 전개될 자식 데이터를 지정하는 구문.

    • 자식 데이터는 CONNECT BY절에 주어진 조건을 만족해야 함.(조인)
  • PRIOR: CONNECT BY절에 사용되며, 현재 읽은 칼럼을 지정한다.

    • PRIOR 자식 = 부모 : 부모 → 자식 순방향 전개
    • PRIOR 부모 = 자식 : 자식 → 부모 역방향 전개
  • ORDER SIBLINGS BY: 형제 노드 사이에서 정렬을 수행

  • LEVER: 계층 구조 쿼리에서 수행 결과의 Depth를 표현하는 의사컬럼

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

  • NOCYCLE : 데이터를 전개하면서 이미 나타났던 동일한 데이터가 전개 중에 다시 나타난다면 이것을 사이클(Cycle)

[88번] ORACLE 계층형

  • 순방향 전개란 자식 노드로부터 부모 노드 방향으로 전개하는 것을 말한다.
  • 루트 노드의 LEVEL 값은 1이다.

[89번]

START WITH 매니저사원번호 IS NULL
CONNECT BY PRIOR 사원번호 = 매니저사원번호
AND 입사일자 BETWEEN '2013-01-01' AND '2013-12-31'
ORDER SIBLINGS BY 사원번호

부모 행의 자식을 찾는 과정에서 ORACLE은 부모 행에 대한 CONNECT BY 조건 PRIOR 식을 평가한다.
따라서 조건이 부모에 해당되지 않아서 부모를 선택하지 않는 경우는 없다.

[90번]

  • SQL SERVER에서 계층형 질의문은 CTE를 재귀 호출함으로써 계층 구조를 전개한다.
  • CTE 식을 앵커 멤버와 재귀 멤버로 분할한다.
  • PRIOR 키워드는 SELECT, WHERE절에서도 사용할 수 있다.

[91번]
CONNECT BY 상위부서코드 = PRIOR 부서코드
CONNECT BY PRIOR 부서코드 = 상위부서코드와 같다.

셀프 조인

동일 테이블 사이의 조인. FROM 절에 동일 테이블이 두 번 이상 나타난다.
식별을 위해 반드시 테이블 별칭(Alias)를 사용한다.

SELECT E1.사원, E1.관리자, E2.관리자 차상위_관리자 
FROM 사원 E1, 사원 E2 
WHERE E1.관리자 = E2.사원
SELECT E1.사원, E1.관리자, E2.관리자 차상위_관리자 
FROM 사원 E1 
   LEFT OUTER JOIN 사원 E2 
   ON (E1.관리자 = E2.사원)

[94번]
DISTINCE: 중복된 값은 한번만 출력한다.

profile
🌱 주니어 백엔드 개발자입니당

0개의 댓글