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와 연결되어 실행, 유연하지만 성능 부담 가능
👉 성능을 고려할 때는 가능하면 비상관 서브쿼리를 사용하는 것이 좋고, 꼭 필요한 경우에만 상관 서브쿼리를 쓰는 것이 실무에서의 팁입니다.
'컴퓨터 과학 > 데이터 베이스' 카테고리의 다른 글
| MySQL 생성(Create), 수정(Update/Alter), 삭제(Delete/Drop) 문법 정리 (0) | 2025.08.19 |
|---|---|
| MySQL에서 백틱(`), 작은따옴표(’), 큰따옴표(”)의 용도 정리 (2) | 2025.08.18 |
| SQL Derived Table(파생 테이블)과 Alias의 필요성 (1) | 2025.08.18 |
| SQL 서브쿼리(Subquery)의 결과 형태 정리 (1) | 2025.08.18 |
| SQL 서브쿼리와 ANY, ALL 키워드 (3) | 2025.08.18 |