셀프 조인
- 나 자신을 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 컬럼명 : 현재 전개할 데이터의 루트 데이터 표시 ( 단항 연산자 )
'SQLD' 카테고리의 다른 글
SQLD 개념정리 (View) (0) | 2023.11.08 |
---|---|
SQLD 개념정리 (서브 쿼리) (0) | 2023.11.07 |
SQLD 개념정리 (집합 연산자) (0) | 2023.11.07 |
SQLD 개념정리 (GROUP BY, HAVING, ORDER BY, WITH THIS) (1) | 2023.11.06 |
SQLD 개념정리 (NULL, NULL 관련 함수) (0) | 2023.11.06 |