DataBase - 계층형 질의
- 게층형 데이터란 동일 테이블에 계층적으로 상위와 하위 데이터가 포함된 데이터를 말한다.
- ex) 사원들 사이에서 상위사원(관리자)와 하위사원의 관계가 존재한다.
- 엔터티를 순환관계 데이터 모델로 설계할 경우 계층형 데이터가 발생한다.
Oracle 계층형 질의
SELECT 칼럼명...
FROM 테이블명
WHERE 조건...
START WITH 조건
CONNECT BY PRIOR 조건;
- START WITH절은 계층 구조의 시작 위치를 지정하는 구문이다. (루트 데이터 지정)
- CONNECT BY절은 다음에 전개될 자식 데이터를 지정하는 구문이다. (조인)
- "PRIOR 자식 = 부모"형태를 사용하면 계층 구조에서 부모 -> 자식 방향으로 내려가는 순방향으로 전개됨
- “PRIOR 부모 = 자식”형태를 사용하면 계층 구조에서 자식 -> 부모 방향으로 내려가는 순방향으로 전개됨 </U>
Oracle 순방향 전개
[예제 1]
SELECT LEVEL, LPAD(' ', 4 * (LEVEL-1)) || EMPNO 사원, MGR 관리자,
CONNECT_BY_ISLEAF ISLEAF
FROM EMP
START WITH MGR IS NULL
CONNECT BY PRIOR EMPNO = MGR;
가상 칼럼
- LEVEL
-
루트 데이터이면 1 그 하위 데이터이면 2이다. 리프(Leaf) 데이터까지 1씩 증가한다.
-
- CONNECT_BY_ISLEAF
- 전개 과정에서 해당 데이터가 리프 데이터이면 1 그렇지 않으면 0이다.
- CONNECT_BY_ISCYCLE
- 전개 과정에서 자식을 갖는데, 해당 데이터가 조상으로서 존재하면 1,
- 그렇지 않으면 0이다. 여기서 조상이란 자신으로부터 루트까지의 경로 에 존재하는 데이터를 말한다.
- CYCLE 옵션을 사용했을 때만 사용할 수 있다.
[예제 2]
SELECT CONNECT_BY_ROOT EMPNO 시작사원, SYS_CONNECT_BY_PATH(EMPNO,'/') 경로,
EMPNO 사원, MGR 관리자
FROM EMP
START WITH MGR IS NULL
CONNECT BY PRIOR EMPNO = MGR;
가상 칼럼
- CONNECT_BY_ROOT
- 현재 전개할 데이터의 루트(시작) 데이터를 표시한다.
- 사용법 : CONNECT_BY_ROOT 칼럼
- SYS_CONNECT_BY_PATH
- 루트(시작) 데이터부터 현재 전개할 데이터까지의 경로를 표시한다.
- 사용법 : SYS_CONNECT_BY_PATH(칼럼, 경로분리자)
과제 풀이 : 7주차 과제
7-3 : 순방향 전개를 나타내는 계층형 SQL문을 한글 질의문과 함께 작성하라. (EMP 테이블을 사용할 경우 JOB을 출력하도록 함) [2점]
한글 질의문 : EMP 테이블에서 계층구조를 관리자가 NULL(MGR = NULL)인것을 시작으로 순방향으로 전개해, LEVEL, 이름, 직업, 사원 계층위치, 관리자를 출력하여라.
SQL문
SELECT LEVEL, ENAME 이름, JOB 직업, LPAD(‘ ‘, 4 * (LEVEL-1)) || EMPNO 사원, MGR 관리자, CONNECT_BY_ISLEAF ISLEAF
FROM EMP
START WITH MGR IS NULL
CONNECT BY PRIOR EMPNO = MGR;
7-4 : 역방향 전개를 나타내는 계층형 SQL문을 한글 질의문과 함께 작성하라. (EMP 테이블을 사용할 경우 JOB을 출력하도록 함) [2점]
한글 질의문 : EMP 테이블에서 사원 번호가 7369인 사원을 기준으로 역방향으로 계층구조를 전개해 LEVEL, 사원이름, 역할, 관리자를 출력하여라.
SQL문
SELECT LEVEL, ENAME 이름, JOB 직업, LPAD(‘ ‘, 4 * (LEVEL-1)) || EMPNO 사원, MGR 관리자,
CONNECT_BY_ISLEAF ISLEAF
FROM EMP
START WITH EMPNO = ‘7369’
CONNECT BY PRIOR MGR = EMPNO;