SQL에서 복잡한 데이터 조회를 할 때 서브쿼리(Subquery)와 인라인 뷰(Inline View)를 적절히 활용하면 훨씬 효율적인 쿼리를 만들 수 있습니다. 이번 글에서는 이 두 개념의 차이점과 실제 사용 방법을 예제와 함께 정리합니다.
서브쿼리란?
서브쿼리(Subquery)란, SQL문 안에 포함된 또 다른 SELECT 문을 말합니다.
특징
- 메인 쿼리(Main Query) 내부에 위치
- 괄호로 감싸 사용함: (SELECT ...)
- 단일 값 또는 다중 행/열 반환 가능
- SELECT, FROM, WHERE, HAVING 등 다양한 위치에서 사용 가능
서브쿼리의 종류
① 스칼라 서브쿼리 (Scalar Subquery)
- 단일 값을 반환
SELECT 이름,
(SELECT MAX(급여) FROM 직원) AS 최고급여
FROM 직원;
② 인라인 뷰 (Inline View)
- FROM 절에 위치한 서브쿼리, 마치 임시 테이블처럼 동작
SELECT 부서명, 평균급여
FROM (
SELECT 부서번호, AVG(급여) AS 평균급여
FROM 직원
GROUP BY 부서번호
) AS 부서_급여
JOIN 부서 ON 부서.부서번호 = 부서_급여.부서번호;
③ 서브쿼리 IN절
SELECT 이름
FROM 직원
WHERE 부서번호 IN (
SELECT 부서번호
FROM 부서
WHERE 지역 = '서울'
);
🧱 서브쿼리의 위치별 사용법
위치 | 설명 | 예시 |
SELECT절 | 스칼라 서브쿼리 | SELECT (SELECT MAX(급여) FROM 직원) |
FROM절 | 인라인 뷰 | FROM (SELECT ...) AS 별칭 |
WHERE절 | 조건 비교용 (IN, =, EXISTS 등) | WHERE 급여 > (SELECT AVG(급여) ...) |
HAVING절 | 집계 조건 비교 | HAVING SUM(판매금액) > (SELECT ...) |
🤔 서브쿼리 vs 조인
구분 | 서브쿼리 | 조인 |
사용 위치 | SELECT, FROM, WHERE, HAVING 등 | FROM절에만 사용 |
가독성 | 복잡한 조건에 유리 | 데이터 병합이 명확할 때 유리 |
성능 | 경우에 따라 조인보다 느릴 수 있음 | 일반적으로 빠름 (인덱스 사용 가능 등) |
🧠 TIP: 서브쿼리는 논리적 구조를 분리하고 싶을 때, 조인은 두 테이블을 병합해서 처리할 때 사용하면 좋아요.
📚 실전 예제 모음
1. 평균 급여보다 많이 받는 직원 조회
SELECT 이름, 급여
FROM 직원
WHERE 급여 > (
SELECT AVG(급여)
FROM 직원
);
2. 최고 급여를 받는 직원 조회 (스칼라 서브쿼리)
SELECT 이름, 급여
FROM 직원
WHERE 급여 = (
SELECT MAX(급여)
FROM 직원
);
3. 인라인 뷰로 부서별 평균 급여 정렬
SELECT
FROM (
SELECT 부서번호, AVG(급여) AS 평균급여
FROM 직원
GROUP BY 부서번호
) AS 부서급여
ORDER BY 평균급여 DESC;
📝 정리
개념 | 요약 설명 |
서브쿼리 | 쿼리 내부에 포함된 또 다른 SELECT 문 |
스칼라 서브쿼리 | 하나의 값 반환 ("SELECT" 절 등에서 사용) |
인라인 뷰 | FROM절에서 사용하는 서브쿼리, 임시 테이블 |
비교 연산자 | IN, =, >, EXISTS 등과 함께 사용 가능 |
주의사항 | 서브쿼리는 복잡해질수록 성능에 유의 필요 |
서브쿼리와 인라인 뷰는 SQL에서 데이터를 다층적으로 가공할 수 있게 해주는 도구입니다. SQLD 시험에서도 자주 출제되니, 꼭 직접 쿼리를 짜보면서 익숙해지세요!
'프로그래밍' 카테고리의 다른 글
트랜잭션과 병행 제어: 데이터베이스의 신뢰성을 지키는 핵심 원리 (3) | 2025.08.06 |
---|---|
인덱스와 성능 향상 전략 – SQLD 필수 개념 정리 (2) | 2025.08.05 |
GROUP 함수와 집계 처리 – SQLD 완벽 정리 (2) | 2025.08.05 |
JOIN의 모든 것 – 관계형 데이터베이스의 핵심 연결 기술 (2) | 2025.08.04 |
SELECT 구문과 조건절 완전정복 (4) | 2025.08.04 |