데이터베이스/SQLD

[SQLD 도전기] SQL 활용(3) - 계층형 질의와 셀프 조인

썬키 2022. 10. 26. 04:13

본문 내용은 모두 필자가 공부하며 직접 정리한 내용입니다.

Kdata 데이터자격검정의 SQL 개발자(SQLD) 가이드를 참고하였습니다.

 

─지난 글 보기─

 

[SQLD 도전기] SQL 활용(2) - 집합 연산자(SET OPERATOR)

본문 내용은 모두 필자가 공부하며 직접 정리한 내용입니다. Kdata 데이터자격검정의 SQL 개발자(SQLD) 가이드를 참고하였습니다. ─지난 글 보기─ [SQLD 도전기] SQL 활용(1) - 표준 조인(STANDARD JOIN)

itsmesunky.tistory.com

과목 2 SQL 기본 및 활용

 

제 2장 SQL  활용

제 3절 계층형 질의와 셀프 조인

1.계층형 질의

ㆍ테이블에 계층형 데이터가 존재하는 경우 데이터를 조회하기 위해서 계층형 질의를 사용한다.

(*계층형 데이터 : 동일 테이블에 계층적으로 상위와 하위 데이터가 포함된 데이터)

출처 : Kdata 데이터자격검정

ㆍ(2)계층형 구조에서 A의 하위 사원은 B,C이고 B밑에는 하위 사원이 없고 C의 하위 사원은 D,E가 있다.

ㆍ계층형 구조를 데이터로 표현한 것이 (3)샘플 데이터이다.

 

가. Oracle 계층형 질의

출처 : Kdata 데이터자격검정

START WITH절 : 계층 구조 전개의 시작 위치를 지정하는 구문이다.

즉, 루트 데이터를 지정한다(액세스)

 

CONNECT BY절 : 다음에 전개될 자식 데이터를 지정하는 구문이다.

자식 데이터는 CONNECT BY절에 주어진 조건을 만족해야 한다(조인)

 

PRIOR : CONNECT BY절에 사용되며, 현재 읽은 칼럼을 지정한다.

PRIOR 자식 = 부모 형태를 사용하면 계층구조에서 부모 데이터에서 자식 데이터(부모 → 자식) 방향으로 전개하는 순방향 전개를 한다.

PRIOR 부모 = 자식 형태를 사용하면 반대로 자식 데이터에서 부모 데이터(자식 → 부모) 방향으로 전개하는 역방향 전개를 한다.

(* 밑의 캡쳐를 참고하면 이해하는데에 큰 도움이 된다.)

 

NOCYCLE : 데이터를 전개하면서 이미 나타났던 동일한 데이터가 전개 중에 다시 나타난다면

이것을 가리켜 사이클(Cycle)이 형성되었다라고 말한다.

그렇지만 NOCYCLE를 추가하면 사이클이 발생한 이후의 데이터는 전개하지 않는다.

 

ORDER SIBLINGS BY : 형제 노드(동일 LEVEL) 사이에서 정렬을 수행한다.

 

ㆍWHERE : 모든 전개를 수행한 후에 지정된 조건을 만족하는 데이터만 추출한다.

 

출처 : Youtube채널 전광철 OCP
출처 : Youtube채널 전광철 OCP

ㆍOracle은 계층형 질의를 사용할 때 다음과 같은 가상 칼럼(Pseudo Column)을 제공한다.

출처 : Kdata 데이터자격검정

 

2. 셀프 조인

ㆍ셀프 조인(Self Join)이란 동일 테이블 사이의 조인을 말한다.

ㆍ따라서 FROM 절에 동일 테이블이 두 번 이상 나타난다.

ㆍ동일 테이블 사이의 조인을 수행하면 테이블과 칼럼 이름이 모두 동일하기 때문에 식별을 위해 반드시 테이블 별칭(Alias)를 사용해야 한다.

ㆍ셀프 조인에 대한 기본적인 사용법은 다음과 같다

SELECT ALIAS명1.칼럼명, ALIAS명2.칼럼명, ... 
FROM 테이블1 ALIAS명1, 테이블2 ALIAS명2 
WHERE ALIAS명1.칼럼명2 = ALIAS명2.칼럼명1;

SELECT WORKER.ID 사원번호, WORKER.NAME 사원명, MANAGER.NAME 관리자명
FROM EMP WORKER, EMP MANAGER 
WHERE WORKER.MGR = MANAGER.ID;

 

 

 

 

다음에는 서브쿼리에 관한 내용을 정리하여 포스팅하겠습니다.