DB/OracleSQL

서브쿼리(Subquery)

do-oni 2021. 7. 13. 00:20

07.08 TIL

 

Mainquery & Subquery

Subquery는 Mainquery 전에 실행 된다.
Subquery의 결과가 Mainquery에서 사용 된다.
Mainquery alias를 Subquery가 따른다.
Subquery는 괄호()로 묶는다.
가독성을 위해 비교 조건의 오른쪽에 Subquery를 배치. 그러나 비교 연산자의 양쪽 모두에 사용 가능.

 

Subquery 명칭
Scala Subquery (스칼라 서브쿼리) - SELECT절에 사용
Inline View (인라인 뷰) - FROM절에 사용
Subquery - WHERE절에 사용

 

Subquery 유형
Single-row subquery - 단일 행 연산자
Multiple-row subquery - 다중 행 연산자
Correlated subquery - 행 단위 처리에 사용, 각 subquery는 outer query의 모든 행에 한번씩 실행

 

Single-row subquery & Multiple-row subquery

 

Single-row Subquery (단일 행) 비교 연산자 - 한 행만 반환

 

Multiple-row Subquery (다중 행) 비교 연산자 - 두 개 이상의 행을 반환

IN 연산자 - ( = + or) 와 같다.
NOT IN 연산자 -  ( = + and) 와 같다. Subquery의 null값은 Mainquery에 연산이 안됨
IN vs EXISTS
IN - 실제 존재하는 데이터들의 모든 값까지 확인 (NOT IN을 사용하면 조건에 맞는 데이터가 있다고 하더라도           null이 존재하면 "no rows selected" 라는 에러가 난다. nvl을 사용한 null 처리가 필요함.)
EXISTS - 단지 해당 행이 존재하는지만 확인, 더 이상 수행되지 않음, 일반적인 경우 성능이 더 좋다.

Correlated Subquery

 

Create & Replace view Keyword - SELECT 명령문을 저장해주는 기능
VIEW란? - 이름이 있는 SELECT 명령문