SQLD

SQLD 개념정리 (계층형 질의, 셀프조인)

chojdsj 2023. 11. 7. 17:45
728x90

 

셀프 조인

 

 

- 나 자신을 JOIN -> 이 때 두 컬럼 다 Alias 반드시 사용해야 식별 가능.

 

- 한 테이블 내에서 두 컬럼이 연관 관계가 있다.

 

 

 

 

 

 

계층형 질의

 

 

- 테이블에 계층형 데이터가 존재하는 경우의 데이터를 조회하기 위해 사용

-> 계층형 데이터 : 동일 테이블에 계층적으로 상/하위 데이터가 포함된 데이터

     ex) 사원 테이블의 사원들 사이에 "하위 사원"과 "상위 사원(관리자)"의 관계

 

- 엔티티를 순환관계 데이터 모델로 설계할 경우 계층형 데이터가 됨

 

- SQL Server에서의 계층형 질의문은 CTE(Common Table Expression)를 재귀 호출함으로써 계층 구조를 전개한다.

 

- SQL Server에서의 계층형 질의문은 앵커 멤버를 실행하여 기본 결과 집합을 만들고, 이후 재귀 멤버를 지속적으로 실행한다.

 

- 오라클의 계층형 질의문에서 WHERE절은 모든 전개를 진행한 이후 필터 조건으로서 조건을 만족하는 데이터만을 추출하는데 활용된다. 

 

 

 

 

 

Oracle 계층형 질의

 

 

- 계층형 질의에서 사용되는 가상 컬럼

 

* LEVEL : 루트 데이터를 1로 시작하여 , Leaf까지 하위로 갈수록 1씩 증가

 

* Connect_By_isLeaf : 리프 데이터라면 1을 리턴, 아니면 0

 

* Connect_By_isCycle : 자식을 갖는데, 해당 데이터가 조상 데이터라면 1, 아니면 0

 

 

 

* START WITH 절 : 레벨의 시작

 

* CONNECT BY 절 : 그 다음에 자식 레벨 지정 (이 때 Connect By 절의 조건 만족해야옴)

 

* PRIOR : Connect By 절에 사용되며, 현재 읽은 컬럼을 지정 (SELECT, WHERE절도 사용 가능)

 

-> PRIOR 자식 = 부모 == [ 부모 -> 자식 ] 으로 순방향 전개, 리프=1

-> PRIOR 부모 = 자식 == [ 자식 -> 부모 ] 으로 역방향 전개, 루트=1

 

 

 

 

 

 

* ORDER SIBLINGS BY : 형제 Node 위치를 바꿈

 

 

* NoCycle : 이미 나타난 동일한 데이터가 전개 중에 다시 나타난다면, 이것을 Cycle 형성이라 함

 

   -> 사이클 발생한 데이터는 런타임 오류 발생

   -> 따라서 NoCycle 추가 -> 사이클 발생 이후 데이터는 전개 X

 

* SYS_Connect_By_Paht ( 컬럼명, 경로분리자 ) : 루트 데이터부터 현재 전개할 데이터까지 경로를 표시

 

* Connect_By_ROOT 컬럼명 : 현재 전개할 데이터의 루트 데이터 표시 ( 단항 연산자 )