1 minute read

  • 게층형 데이터란 동일 테이블에 계층적으로 상위와 하위 데이터가 포함된 데이터를 말한다.
  • 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;