1. 오라클에서만 가능한 계층형쿼리 (start with ~ connect by구문)

-- p.46
SELECT 
 D.DEPT_NO 
 , LPAD ('☆', 2 * LEVEL - 2, '★') || D.DEPT_NM AS DEPT_NM
 , D.UP_DEPT_NO 
 , LEVEL LV 
FROM CF08 D 
START WITH D.UP_DEPT_NO IS NULL              -- 최상위 데이터에 대한 조건
CONNECT BY D.UP_DEPT_NO = **PRIOR D**.DEPT_NO    -- 데이터를 어떻게 연결시킬지를 정하는 조건
ORDER SIBLINGS BY D.DEPT_NO -- 정렬시 계층에 따라 하위 노드가 있으면 하위 노드를 표현

| DEPT_NO | DEPT_NM       | UP_DEPT_NO | LV   |
| ------- | ----------    | ---------- | ---- |
| 10      | 대표이사       |            | 1    |
| 11      | ★☆사업본부   | 10         | 2    |
| 13      | ★★★☆상품팀 | 11         | 3    |
| 15      | ★★★☆영업팀 | 11         | 3    |
| 12      | ★☆지원본부   | 10         | 2    |
| 14      | ★★★☆물류팀 | 12         | 3    |
| 16      | ★★★☆재무팀 | 12         | 3    |
CONNECT BY 현재테이블.상위부서번호 = **부모테이블**.부서번호 -- 왼쪽은 하단레코드, 우측은 상단레코드

2. 모든 DBMS에서 가능한 쿼리 (with~as구문)

-- p.47
WITH DEPTS (DEPT_NO,DEPT_NM,UP_DEPT_NO,LV) AS (
	 SELECT 
			 D.DEPT_NO 
			 , D.DEPT_NM 
			 , D.UP_DEPT_NO 
			 , 1 LV 
	 FROM CF08 D 
	 WHERE D.UP_DEPT_NO IS NULL -- START WITH
	 UNION ALL
	 SELECT 
			 D.DEPT_NO 
			 , D.DEPT_NM 
			 , D.UP_DEPT_NO 
			 , DS.LV + 1
	 FROM CF08 D 
			 , DEPTS DS 
	 WHERE 1 = 1
	 AND D.UP_DEPT_NO = DS.DEPT_NO -- CONNECT BY
)
SEARCH DEPTH FIRST BY DEPT_NO SET DEPT_SEQ -- ORDER SIBLINGS BY
SELECT 
		 DEPT_NO 
		 , LPAD(' ', 2 * LV - 2, ' ') || DEPT_NM AS DEPT_NM 
		 , UP_DEPT_NO 
		 , LV 
FROM DEPTS 
ORDER BY DEPT_SEQ