2-2장 SQL 활용 - 3절 계층형 질의와 셀프 조인
1. 계층형 질의
개념
계층형 데이터를 조회하기 위해 사용.
계층형 데이터: 동일 테이블에서 계층적으로 상위와 하위 데이터가 포함된 데이터. 엔터티를 순한관계 데이터 모델로 설계할 경우, 계층형 데이터가 발생한다.(ex. 조직, 사원, 메뉴)
샘플 데이터: 계층형 구조를 데이터로 표현한 것
Oracle 계층형 질의
START WITH 절: 계층 구조 전개의 시작 위치를 지정하는 구문. 루트 데이터를 지정한다.
CONNECT BY 절: 다음에 전개될 자식 데이터를 지정하는 구문. 자식 데이터는 CONNECT BY 절에 주어진 조건을 만족해야 한다.(조인 조건 지정)
- LEVEL : 검색 항목의 깊이, 루트데이터면 1, 하위데이터면 2
- CONNECT_BY_ROOT : 최상위 계층 값 표시
- CONNECT_BY_ISLEAF : 최하위 계층 값 표시
- SYS_CONNECT_BY_PATH : 계층 구조의 전개 경로 표시
PRIOR: CONNECT BY 절에 사용되며, 현재 읽은 칼럼을 지정한다.
- PRIOR 자식=부모: 계층 구조에서 자식 데이터에서 부모 데이터 방향으로 순방향을 전개(자식→부모)
- PRIOR 부모=자식: 역방향 전개(부모 → 자식)
CONNECT BY절의 루프 알고리즘 키워드
- NOCYCLE : 순환구조의 발생지점까지만 전개
- CONNECT_BY_ISCYCLE : 순환구조 발생지점 표시 (부모 노드와 자식 노드가 같을 때 1 아니면 0 출력)
ORDER SIBLINGS BY: 형제 노드 사이에서 정렬을 수행한다. (동일 LEVEL)
WHERE: 모든 전개를 수행 후 지정된 조건을 만족하는 데이터만 추출한다. (필터링)
LPAD : 계층형 조회 결과를 명확히 하기 위해 사용 (LEVEL 값을 이용하여 결과 데이터 정렬)
계층형 질의에 대한 논리적인 실행 모습
순방향일 경우 | 역방향일 경우 |
![]() |
![]() |
* SQL Server 계층형 질의: CTE(Common Table Expression)로 재귀 호출
2. 셀프 조인
셀프 조인이란, 동일 테이블 사이의 조인을 말한다. FROM 절에 동일 테이블이 두 번 이상 나타난다.
동일 테이블 사이의 조인을 수행하면 테이블과 칼럼 이름이 모두 동일해서, 식별을 위해 반드시 테이블 별칭을 사용해야 한다. 칼럼에도 모두 테이블 별칭을 사용해서, 어느 테이블의 칼럼인지 식별해줘야 한다