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 |