본문 바로가기
BackEnd/DB, SQL

SQL 13편: 서브쿼리

by summer_light 2021. 12. 30.

서브쿼리 

서브쿼리는 SQL문을 실행하는 데 필요한 데이터를 추가로 조회하기 위해 SQL문 내부에서 사용하는 SELECT문을 의미한다. 이에 반해 서브쿼리의 결과 값을 사용하여 기능을 수행하는 영역은 메인쿼리라고 부른다. 

 

서브쿼리의 특징

서브쿼리의 특징을 정리하면 다음과 같다. 

1. 서브쿼리는 비교 대상의 오른쪽에 놓인다.

2. 괄호 ()로 묶어 사용한다.

3.  ORDER BY절을 사용할 수 없다. (특수한 경우 제외)

4. 메인 쿼리의 비교 대상과 같은 자료형과, 같은 개수로 지정해야 한다.

5. 서브쿼리의 결과 행 수는 메인쿼리의 연산자 종류(단일행 연산자인지, 다중행 연산자인지)와 호환 가능해야 한다.

 

 

 

 

단일행 서브쿼리

특정 함수를 사용한 결과 값이 하나일 때 단일행 서브쿼리로서 사용할 수 있다. 

 

단일행 연산자

> >= = <= <
초과 이상 같음 이하 미만
<> ^= !=
같지 않음

 

 

 

다중행 서브쿼리

실행 결과 행이 여러 개로 나오는 서브쿼리. 다중행 연산자와 함께 사용해야 메인쿼리와 비교할 수 있다. 

 

다중행 연산자

IN 메인쿼리의 데이터가 서브쿼리의 결과 중 하나라도 일치한 데이터가 있다면 TRUE
= ANY, = SOME 메인쿼리의 조건식을 만족하는 서브쿼리의 결과가 하나 이상이면 TRUE
= ALL 메인쿼리의 조건식을 만족하는 서브쿼리의 결과를 모두 만족하면 TRUE
EXISTS 서브쿼리의 결과가 존재하면 TRUE

 

 

 

 

FROM절에 사용하는 서브쿼리: 인라인 뷰

인라인 뷰는 특정 테이블 전체가 아닌 일부 데이터를 먼저 추출해 온 후 별칭을 준 것을 말한다. 

EX. 'FROM (SELECT * FROM EMP DEPT) D' 는 D라는 별칭을 가진 인라인 뷰

 

FROM절의 서브쿼리가 너무 많을 경우 가독성과 성능 문제 때문에 SELECT 문 이전에 WITH절을 이용하여 다음과 같이 쓰기도 한다.

WITH
[별칭1] AS (SELECT문 1),
[별칭2] AS (SELECT문 2),
...
[별칭n] AS (SELECT문 n)
SELECT
FROM 별칭1, 별칭2

와 같이 쓰기도 한다.

 

 

 

 

 

SELECT절에 사용하는 서브쿼리: 스칼라 서브쿼리

SELECT절에 하나의 열 영역으로서 결과를 출력하는 경우를 말한다.

SELECT (SELECT ~)

댓글