SQL & 데이터베이스/SQL 기본 문법 & 오류

[SQL] 서브쿼리(Subquery) 개념 및 활용 방법

Jinsapp 2025. 3. 12. 18:02

[SQL] 서브쿼리(Subquery) 개념 및 활용 방법

1. 서브쿼리란?

서브쿼리(Subquery)는 **하나의 SQL 문 안에서 또 다른 SQL 문을 포함하는 쿼리**를 의미합니다.

즉, SELECT, INSERT, UPDATE, DELETE 등의 주요 SQL 문에서 보조적으로 실행되는 쿼리를 말합니다.


2. 서브쿼리 기본 구조


SELECT 컬럼명
FROM 테이블명
WHERE 컬럼명 = (SELECT 컬럼명 FROM 테이블명 WHERE 조건);

✅ 예제: 최고 연봉을 받는 직원 찾기


SELECT 이름, 연봉
FROM 직원
WHERE 연봉 = (SELECT MAX(연봉) FROM 직원);
📌 실행 결과:
이름연봉
김철수9000

3. 서브쿼리의 유형

서브쿼리 유형설명예제
스칼라 서브쿼리 하나의 값만 반환하는 서브쿼리 WHERE 컬럼 = (SELECT ...)
단일 행 서브쿼리 한 행만 반환하는 서브쿼리 WHERE 컬럼 = (SELECT ...)
다중 행 서브쿼리 여러 개의 값을 반환하는 서브쿼리 IN (SELECT ...)
상관 서브쿼리 메인 쿼리의 각 행에 대해 개별적으로 실행되는 서브쿼리 EXISTS (SELECT ...)

4. 서브쿼리 활용 예제

✅ 단일 행 서브쿼리


SELECT 이름, 부서
FROM 직원
WHERE 부서코드 = (SELECT 부서코드 FROM 부서 WHERE 부서명 = '영업');
📌 실행 결과:
이름부서
이영희영업
박지훈영업

✅ 다중 행 서브쿼리


SELECT 이름, 연봉
FROM 직원
WHERE 부서코드 IN (SELECT 부서코드 FROM 부서 WHERE 지역 = '서울');
📌 실행 결과:
이름연봉
김민수7000
이지은8000

✅ 상관 서브쿼리


SELECT 이름
FROM 직원 E
WHERE EXISTS (SELECT 1 FROM 부서 D WHERE E.부서코드 = D.부서코드 AND D.부서명 = '개발');
📌 실행 결과:
이름
정우성
한지민

5. 서브쿼리 vs JOIN 비교

  • 서브쿼리: 독립적인 쿼리를 중첩하여 사용 (가독성이 좋음)
  • JOIN: 여러 테이블을 연결하여 성능이 우수함

✅ 동일한 작업을 JOIN으로 수행


SELECT E.이름, E.연봉
FROM 직원 E
JOIN 부서 D ON E.부서코드 = D.부서코드
WHERE D.부서명 = '영업';

🔍 결론

  • ✔ 서브쿼리는 데이터를 계층적으로 조회할 때 유용
  • ✔ 성능이 중요한 경우 JOIN이 더 빠를 수도 있음
  • ✔ 다중 행을 반환할 경우 IN 또는 EXISTS를 활용

📖 더 많은 SQL 개념도 함께 확인하세요!

👉 SQL 최적화 가이드 보러 가기