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

SQL 상관 서브쿼리와 비상관 서브쿼리

Data Jun 2025. 8. 18. 13:08

SQL에서 **서브쿼리(Subquery)**는 쿼리 안에 또 다른 SELECT문을 작성하는 것입니다.
이 서브쿼리는 크게 두 가지로 나눌 수 있는데, 바로 비상관 서브쿼리상관 서브쿼리입니다.

 

비상관 서브쿼리 (Non-Correlated Subquery)

  • 특징: 메인 쿼리와 독립적으로 실행될 수 있음
  • 서브쿼리가 먼저 실행되고, 그 결과가 메인 쿼리에 전달됨
-- 평균 가격보다 비싼 상품 조회
SELECT *
FROM item
WHERE price > (
    SELECT AVG(price)
    FROM item
);

서브쿼리 (SELECT AVG(price) FROM item)은 메인 쿼리와 관계없이 단독 실행 가능합니다.
즉, 한 번만 실행된 후 결과(평균 가격)를 메인 쿼리에 전달합니다.

 

상관 서브쿼리 (Correlated Subquery)

  • 특징: 메인 쿼리의 각 row와 연관되어 실행
  • 메인 쿼리의 컬럼 값을 서브쿼리에서 참조하기 때문에, row마다 서브쿼리가 반복 실행
-- 각 상품별로 평균 별점이 4 이상인 상품 조회
SELECT i.*
FROM item AS i
WHERE (
    SELECT AVG(r.star)
    FROM review AS r
    WHERE r.item_id = i.id
) >= 4;
여기서 서브쿼리는 i.id를 참조하고 있습니다.

즉, item 테이블의 각 row마다 서브쿼리가 실행되어, 해당 상품의 리뷰 평균을 계산합니다.

 

 

차이점 정리

 

정리

  • 비상관 서브쿼리: 독립 실행 가능, 결과를 메인 쿼리에서 활용
  • 상관 서브쿼리: 메인 쿼리의 row와 연결되어 실행, 유연하지만 성능 부담 가능

👉 성능을 고려할 때는 가능하면 비상관 서브쿼리를 사용하는 것이 좋고, 꼭 필요한 경우에만 상관 서브쿼리를 쓰는 것이 실무에서의 팁입니다.