본문 바로가기

Database/이론

[DB] 계층형 쿼리

계층형 쿼리

테이블에 계층형 데이터가 존재하는 경우 이것을 조회하기 위한 쿼리를 말합니다.

 

계층형 데이터란, 동일 테이블에 계층적으로

상위데이터와 하위데이터가 포함된 데이터입니다.

 

하드웨어를 예로 들면,

중앙처리장치, 기억장치, 입출력장치의 상위데이터는 하드웨어입니다.

입출력장치를 나눠서 입력장치, 출력장치의 상위데이터가 입출력장치입니다.

 

CREATE TABLE JAN03_DEVICE(

D_NAME VARCHAR2(10 CHAR) PRIMARY KEY,

D_PRIOR VARCHAR2(10 CHAR)

);

 

INSERT INTO JAN03_DEVICE VALUES('하드웨어', NULL);

INSERT INTO JAN03_DEVICE VALUES('중앙처리장치', '하드웨어');

INSERT INTO JAN03_DEVICE VALUES('기억장치', '하드웨어');

INSERT INTO JAN03_DEVICE VALUES('입출력장치', '하드웨어');

INSERT INTO JAN03_DEVICE VALUES('입력장치', '입출력장치');

INSERT INTO JAN03_DEVICE VALUES('출력장치', '입출력장치');

 

하드웨어 테이블을 만들어서 살펴보겠습니다.

 

계층형 쿼리의 형태는

 

START WITH 조건

 

조건에 따라서 계층 구조 전개 시작위치를 지정함

조건을 하나 예로 들자면, 

 

컬럼명 is null

 

 해당 컬럼에 null값이 들어있는 행을시작위치로 설정합니다.

 

그 다음은 CONNECT BY 절이 와야합니다.

 

CONNECT BY [NOCYCLE] 조건

 

CONNECT BY 절은 다음에 전개될 데이터를 지정합니다.

조건에

 

PRIOR 하위데이터 = 상위데이터

 

넣게되면

순방향으로 전개하고

PRIOR 상위데이터 = 하위데이터

 

태를 경우에는 역방향으로 전개합니다.

NOCYCLE 데이터를 전개하면서

이미 나타난 데이터가 나오는 방지해줍니다.

 

[ORDER SIBLINGS BY 컬럼] 

 

ORDER SIBLINGS BY 절은 동일 계층 사이에서 정렬을 해줍니다.

 

총합해서 살펴보면

 

SELECT D_NAME, D_PRIOR, LEVEL FROM JAN03_DEVICE

 

-- 계층을 보기 위해 LEVEL이라는 것을 심어줌

 

START WITH D_PRIOR IS NULL

 

-- 이걸 통해 '하드웨어' 행을 시작점으로 정함

--(NULL값이 들어있는 행부터 시작)

 

CONNECT BY PRIOR D_NAME = D_PRIOR;

 

-- 이떄 여기서 시작행인 '하드웨어'가 상위데이터가 되어

-- 다음 단계를 진행

-- 하드웨어를 상위장치로 가지고 있는 CPU,RAM,IO는 레벨 2가 됨.

 

 

다음과 같이 NULL부터 시작해서 계층이 정해지게 됩니다.

'Database > 이론' 카테고리의 다른 글

[DB] Delete  (0) 2025.01.03
[DB] Update  (0) 2025.01.03
[DB] JOIN 연산의 종류  (0) 2025.01.03
[DB] View  (0) 2025.01.02
[DB] Join  (0) 2025.01.02