컴퓨터 과학/데이터 베이스

SQL 서브쿼리(Subquery)의 결과 형태 정리

Data Jun 2025. 8. 18. 12:33

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와 함께 사용