본문 바로가기

DB/SQLD

[SQLD] SQL 활용 - Subquery

1️⃣ Main query와 Subquery

 ∙ Subquery는 SELECT문 내에 다시 SELECT문을 사용하는 SQL문이다.

 ∙ Subquery의 형태

        - FROM구에 SELECT문을 사용하는 인라인 뷰(View).

        - SELECT문에 Subquery를 사용하는 스칼라 서브쿼리(Scala Subquery).

        - WHERE구에 SELECT문을 사용하면 서브쿼리(Subquery)라고 한다.

 

WHERE 구에 있는 SELECT문은 서브쿼리(Subquery)이고 괄호 내에 SELECT문을 사용한다.

서브쿼리 밖에 있는 SELECT문은 메인쿼리(Mainquery)이다.

 

 FROM구에 SELECT문을 사용하여 가상의 테이블을 만드는 효과를 얻을 수 있다.

FROM구에 SELECT문을 사용한 것인 인라인 뷰(Inline-view)이다.

2️⃣ 단일 행 Subquery와 다중 행 Subquery

 서브쿼리(Subquery)는 반환하는 행 수가 1개인 것과 여러 개인 것에 따라서 단일 행 서브쿼리와 멀티 행 서브쿼리로 분류된다.

 

서브쿼리 종류 설명

단일 행 서브쿼리

(Single row subquery)

 - 서브쿼리를 실행하면 그 결과는 반드시 한 행만 조회된다.

 - 비교 연산자인 =, <, <= 등을 사용한다.

다중 행 서브쿼리

(Multi row subquery)

 - 서브쿼리를 실행하면 그 결과는 여러 개의 행이 조회된다.

 - 다중행 비교 연산자인 IN, ANY, ALL EXIST를 사용한다.

3️⃣ 다중 행 Subquery

 ∙ 다중 행 서브쿼리(Multi row Subquery)는 서브쿼리 결과가 여러 개의 행을 반환하는 것으로 다중 행 연산자를 사용해야 한다.

 ∙ 다중 행 비교 연산자

다중행 연산 설명
IN  Main Query의 비교조건이 Subquery의 결과 중 하나만 동일하면 참이 된다(OR조건)
ALL

 - MAIN Query와 Subquery의 결과가 모두 동일하면 참이 된다.

 - < ALL : 최소값을 반환한다.

 - > ALL : 최대값을 반환한다. 

ANY

 - Main Query의 비교조건이 Subquery의 결과 중 하나 이상 동일하면 참이 된다.

 - < ANY : 하나라도 크게 되면 참이 된다.

 - > ANY : 하나라도 작게 되면 참이 된다.

EXIST  Main Query와 Subquery의 결과가 하나라도 존재하면 참이 된다. 

4️⃣ 스칼라(Scala) Subquery

∙ 스칼라 Subquery는 반드시 한 행과 한 컬럼만 반환하는 서브쿼리이다.

∙ 만약 여러 행이 반환되면 오류가 발생한다.

5️⃣ 연관(Correlated) Subquery

∙ 연관 Subquery는 Subquery 내에서 Main Query 내의 칼럼을 사용하는 것을 의미한다.

'DB > SQLD' 카테고리의 다른 글

[SQLD] SQL 활용 - Table Partition  (0) 2020.03.21
[SQLD] SQL 활용 - Window Function  (0) 2020.03.12
[SQLD] SQL 활용 - Group Function  (0) 2020.03.12
[SQLD] SQL 활용 - Connect by(계층형 조회)  (0) 2020.03.11
[SQLD] SQL 활용 - Join  (0) 2020.03.11