2022. 3. 11. 02:37ㆍSQL
쿼리문(메인 쿼리) 안에 들어가는 쿼리문을 말한다.
⇒ 쿼리문 작성시 사용되는 값을 다른 쿼리에서 구해야 할 경우 사용한다.
SELECT <컬럼명1>
FROM <테이블명1>
WHERE <컬럼명2> = ( SELECT <컬럼명2>
FROM <테이블명2>
WHERE <컬럼명3> = 값 )
반환 되는 데이터의 형태에 따른 서브 쿼리의 분류
SCALAR SUBQUERY
서브 쿼리 결과가 1행, 1열인 서브 쿼리를 의미한다. ⇒ 값이 단 1개
SINGLE ROW SUBQUERY
서브 쿼리 결과가 단 1건 이하인 서브 쿼리를 의미한다. ⇒ 단일 행 비교하는 =, <, > 비교 연산자 사용
MULTI ROW SUBQUERY
서브 쿼리의 실행 결과가 여러 행인 서브 쿼리를 의미한다. ⇒ IN, ALL, ANY, SOME, EXIST 비교 연산자 사용
MULTI COLUMN SUBQUERY
서브 쿼리의 결과로 여러 컬럼이 반환하는 경우로 메인 쿼리의 조건절에서 여러 컬럼을 동시에 비교할 수 있는데 이 때 서브 쿼리와 메인 쿼리에서 비교하고자 하는 컬럼의 수와 컬럼의 위치는 동일해야 한다.
SQL문에서 사용 가능한 서브 쿼리 위치
⇒ SELECT, FROM, WHERE, HAVING, ORDER BY, INSERT의 VALUES, UPDATE의 SET 등에 사용 가능하다.
# GROUP BY에는 사용 불가능하다.
SELECT ⇒ 스칼라 서브쿼리
FROM ⇒ 인라인 뷰
WHERE ⇒ 중첩 서브쿼리
GROUP BY ⇒ X
HAVING ⇒ 중첩 서브쿼리
ORDER BY ⇒ 스칼라 서브쿼리
스칼라 서브쿼리
단일의 의미로서 반드시 1행 1열만을 반환 값으로 반환한다. 라는 제약을 가진 서브쿼리 ⇒ 무조건 1 행 1열
SELECT <컬럼명>, (SELECT AVG(<컬럶명>) FROM <테이블명> WHERE <조건절>)
FROM <테이블명>
# 스칼라 서브쿼리는 메인 서브 쿼리의 ROW 수만큼 반복되어 실행되고 만약 조건을 만족하는 스칼라 서브쿼리 결과가 없으면 NULL을 반환한다. ⇒ 메인 쿼리가 총 N행이라면 스칼라 서브쿼리는 N번 실행된다.
# 스칼라 서브쿼리 장점 : SELECT, HAVING, ORDER BY 등 모든 곳에서 쓰일 수 있다. (GROUP BY 제외)
# 스칼라 서브쿼리 단점 : 서브쿼리는 반드시 단일 컬럼, 단일 행으로 출력되어야 한다.
INLINE VIEW (인라인 뷰)
FROM 구에 SELECT문을 사용하여 가상의 테이블을 만드는 효과가 있다.
SELECT *
FROM ( SELECT <컬럼명1> AS <별칭>, <컬럼명2> FROM <테이블명> <인라인 뷰 별칭>
WHERE <별칭> = 값;
# 인라인 뷰는 SQL 명령문이 실행될 경우에만 임시적으로 생성된다.
# 일반적인 뷰는 정적인 뷰, 인라인 뷰는 동적인 뷰라고 한다.
상호 연관 서브쿼리
상호 연관 서브쿼리는 메인 쿼리의 값을 서브 쿼리에 제공하고 서브 쿼리 수행 결과를 이용해서 다시 메인 쿼리를 실행하는 서브쿼리를 말한다.
⇒ 메인쿼리의 컬럼 값을 서브쿼리에서 참조하는 서브쿼리
(일반적으로 메인쿼리가 먼저 수행되어 읽혀진 데이터를 서브쿼리에서 조건이 맞는지 확인할 때 사용한다.)
# 연관성 없는 서브쿼리
⇒ 서브쿼리가 메인쿼리 컬럼을 가지고 있는 않는 형태로 메인쿼리에 값을 제공하기 위한 목적으로 주로 사용된다.
#메인 쿼리의 컬럼을 서브 쿼리에서 사용 가능
# 서브 쿼리의 컬럼을 메인 쿼리에서 사용 불가능
⇒ 메인 쿼리가 서브 쿼리보다 먼저 실행되기 때문
#인라인 뷰의 컬럼은 메인 쿼리에서 사용 가능
'SQL' 카테고리의 다른 글
| 수직 결합 SET OPERATOR (0) | 2022.03.11 |
|---|---|
| 다중행 서브쿼리 MULTI ROW SUBQUERY 연산자 (0) | 2022.03.11 |
| 계층형 쿼리 (0) | 2022.03.11 |
| 셀프 조인 Self Join (1) | 2022.03.10 |
| 조인 JOIN (0) | 2022.03.09 |