계층형 쿼리: 부모, 자식 간의 수직관계를 트리 구조 형태로 보여주는 쿼리
START WITH: 계층 구조 전개의 시작 위치를 지정하는 구문. 즉, 루트 데이터를 지정한다.
CONNECT BY: 다음에 전개될 자식 데이터를 지정하는 구문.
PRIOR: CONNECT BY절에 사용되며, 현재 읽은 칼럼을 지정한다.
PRIOR 자식 = 부모
: 부모 → 자식 순방향 전개PRIOR 부모 = 자식
: 자식 → 부모 역방향 전개ORDER SIBLINGS BY: 형제 노드 사이에서 정렬을 수행
LEVER: 계층 구조 쿼리에서 수행 결과의 Depth를 표현하는 의사컬럼
WHERE : 모든 전개를 수행한 후에 지정된 조건을 만족하는 데이터만 추출한다.(필터링)
NOCYCLE : 데이터를 전개하면서 이미 나타났던 동일한 데이터가 전개 중에 다시 나타난다면 이것을 사이클(Cycle)
[88번] ORACLE 계층형
[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번]
[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: 중복된 값은 한번만 출력한다.