본문 바로가기
프로그래밍

서브쿼리와 인라인 뷰 – SQLD 필수 개념 정리

by 유형제맘 2025. 8. 5.

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 시험에서도 자주 출제되니, 꼭 직접 쿼리를 짜보면서 익숙해지세요!