-
계층형 조회는 Oracle 데이터베이스에서 지원하는 것으로 계층형으로 데이터를 조회할 수 있음
-
Connect by는 트리 형태의 구조로 질의를 수행하는 것으로 START WITH구는 시작 조건을 의미하고 CONNECT BY PRIOR는 조인 조건임
-
Root 노드로부터 하위 노드의 질의를 실행함
-
계층형 조회에서 MAX(LEVEL)을 사용해 최대 계층 수를 구할 수 있음
-
즉, 계층형 구조에서 마지막 Leaf Node의 계층값을 구함
*CONNECT BY 키워드
-
LEVEL: 검색 항목의 깊이를 의미함(계층구조에서 가장 상위 레벨이 1이 됨)
-
CONNECT_BY_ROOT: 계층구조에서 가장 최상위 값을 표시함
-
CONNECT_BY_ISLEAF: 계층구조에서 가장 최하위를 표시함
-
SYS_CONNECT_BY_PATH: 계층구조의 전체 전개 경로를 표시함
-
NOCYCLE: 순환구조가 발생 지점 까지만 전개 됨
-
CONNECT_BY_ISCYCLE: 순환구조 발생 지점을 표시함
서브쿼리(Subquery)
1. Main query와 Subquery
-
Subquery는 SELECT문 내에 다시 SELECT문을 사용하는 SQL문임
-
Subquery의 형태는 FROM구에 SELECT문을 사용하는 인라인 뷰와 SELECT문에 Subquery를 사용하는 스칼라 서브쿼리 등이 있음
-
WHERE구에 SELECT문을 사용하면 서브쿼리라고 함
-
괄호 안에 있는게 서브쿼리임
-
FROM구에 SELECT문을 사용해 가상의 테이블을 만드는 효과를 얻을 수 있음(인라인 뷰라고함)
2. 단일 행 서브쿼리와 다중 행 서브쿼리
-
단일 행 서브쿼리는 단 하나의 행만 반환하는 서브쿼리로 비교연산자(=, <, <=, >, >=, <>)를 사용함
-
다중 행 서브쿼리는 여러 개의 행을 반환하는 것으로 IN, ANY, ALL, EXISTS를 사용해야 함
*단일 행 서브쿼리: 서브쿼리를 실행하면 그 결과는 반드시 한 행만 조회 됨(비교연산자 사용)
*다중 행 서브쿼리: 서브쿼리를 실행하면 그 결과는 여러 개의 행이 조회 됨(다중 행 비교연산자인 IN, ANY, ALL, EXISTS 사용)
3. 다중 행 서브쿼리
-
다중 행 서브쿼리는 서브쿼리 결과가 여러 개의 행을 반환하는 것으로 다중 행 연산자를 사용해야 함
-
IN(서브쿼리): 메인쿼리의 비교조건이 서브쿼리의 결과 중 하나만 동일하면 참이 됨(OR조건)
-
ALL(서브쿼리): 메인쿼리와 서브쿼리의 결과가 모두 동일하면 참이 됨(<ALL: 최솟값을 반환함, >ALL최댓값을 반환함)
-
ANY(서브쿼리): 메인쿼리의 비교조건이 서브쿼리의 결과 중 하나 이상 동일하면 참이 됨(<ANY: 하나라도 크게 되면 참이 됨, >ANY: 하나라도 작게되면 참이 됨)
-
EXISTS(서브쿼리): 메인쿼리와 서브쿼리의 결과가 하나라도 존재하면 참이됨
4. 스칼라(Scala) 서브쿼리
-
스칼라 서브쿼리는 반드시 한 행과 한 칼럼만 반환하는 서브쿼리임
-
만약 여러 행이 반환되면 오류가 발생함
5. 연관(Correlated) 서브쿼리
-
연관 서브쿼리는 서브쿼리 내에서 메인 쿼리 내의 칼럼을 사용하는 것을 의미함
'SQL 공부' 카테고리의 다른 글
(SQLD)테이블 파티션(Table Partition)/옵티마이저(Optimizer)와 실행 계획 (0) | 2020.09.09 |
---|---|
(SQLD)그룹함수/윈도우 함수(Window Function) (0) | 2020.09.07 |
(SQLD)조인(Join) (0) | 2020.09.03 |
(SQLD)TCL(Transaction Control Language) (0) | 2020.09.01 |
(SQLD)WITH구문/DCL(Data Control Language) (0) | 2020.08.30 |