SQL에서 **서브쿼리(Subquery)**란, 하나의 SQL문 안에서 또 다른 SELECT 문을 사용하는 것을 말합니다.
서브쿼리는 리턴하는 결과 형태에 따라 크게 두 가지로 나눌 수 있습니다.
단일 값 반환 (Scalar Subquery)
서브쿼리 결과가 하나의 값만 나오는 경우입니다.
대표적으로 집계 함수(COUNT, SUM, AVG, MAX, MIN)가 사용될 때 이런 형태가 됩니다
-- 평균 가격보다 비싼 상품 조회
SELECT *
FROM item
WHERE price > (
SELECT AVG(price)
FROM item
);
위 서브쿼리는 평균 가격(단일 값)만 반환하기 때문에 바로 비교 연산자와 함께 사용할 수 있습니다.
여러 값 반환 (Column / Row Subquery)
서브쿼리가 여러 개의 값을 리턴하는 경우입니다.
이때는 IN, ANY, ALL, EXISTS 같은 키워드와 함께 자주 사용됩니다.
-- 리뷰가 3개 이상 달린 상품 조회
SELECT *
FROM item
WHERE id IN (
SELECT item_id
FROM review
GROUP BY item_id
HAVING COUNT(*) >= 3
);
또는 여러 컬럼을 동시에 비교할 수도 있습니다.
-- 고객-상품 조합이 위시리스트에 있는 주문 조회
SELECT *
FROM orders o
WHERE (o.customer_id, o.product_id) IN (
SELECT customer_id, product_id
FROM wishlist
);
이런 경우는 서브쿼리가 여러 row를 반환하더라도, 조건문(IN, ANY, ALL)이 이를 처리할 수 있습니다.
정리
- 단일 값 서브쿼리 (Scalar Subquery)
→ 집계 함수 등으로 하나의 값만 반환 → =, >, < 같은 비교 연산자와 함께 사용 - 다중 값 서브쿼리 (Column/Row Subquery)
→ 여러 row 혹은 여러 컬럼 반환 → IN, ANY, ALL, EXISTS와 함께 사용
'컴퓨터 과학 > 데이터 베이스' 카테고리의 다른 글
| SQL 상관 서브쿼리와 비상관 서브쿼리 (1) | 2025.08.18 |
|---|---|
| SQL Derived Table(파생 테이블)과 Alias의 필요성 (1) | 2025.08.18 |
| SQL 서브쿼리와 ANY, ALL 키워드 (3) | 2025.08.18 |
| SQL 다양한 조인(Join) 연산 정리 (5) | 2025.08.18 |
| SQL 문 작성 순서와 실제 실행 순서 완전 정리 (1) | 2025.08.17 |