SQL 서브쿼리(Subquery) 완벽 정리|SQLD 시험에 반드시 나오는 핵심 문법

요약

SQL 서브쿼리는 SQL문 안에 포함된 또 다른 SQL문을 의미합니다. SQLD 시험에서는 거의 매회 출제되는 핵심 개념이며 실무에서도 데이터 분석과 조회 업무에 자주 사용됩니다. 이번 글에서는 SQL 서브쿼리의 개념부터 종류, 사용법, 주의사항까지 자세히 알아보겠습니다.

SQL 서브쿼리란?

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

쉽게 말해 SQL 안에 SQL을 작성하는 방식입니다.

예를 들어 특정 부서의 부서번호를 먼저 조회한 후 해당 부서 직원을 조회해야 하는 경우가 있습니다.

이때 SQL 서브쿼리를 활용하면 한 번의 SQL 문으로 원하는 결과를 얻을 수 있습니다.

SQL 서브쿼리는 SQLD 시험에서도 매우 자주 등장하며 JOIN과 함께 반드시 이해해야 하는 핵심 문법입니다. 더 많은 정보를 확인하고 SQL 서브쿼리 개념을 익혀보세요.

SQL 서브쿼리가 필요한 이유

예를 들어 SALES 부서에 근무하는 직원을 조회하고 싶다고 가정해보겠습니다.

먼저 부서번호를 확인해야 합니다.

SELECT DEPTNO
FROM DEPT
WHERE DNAME = 'SALES';

조회 결과

30

이후 다시 직원 정보를 조회해야 합니다.

SELECT *
FROM EMP
WHERE DEPTNO = 30;

하지만 SQL 서브쿼리를 사용하면 한 번에 처리할 수 있습니다.

SELECT *
FROM EMP
WHERE DEPTNO = (
    SELECT DEPTNO
    FROM DEPT
    WHERE DNAME = 'SALES'
);

이것이 SQL 서브쿼리를 사용하는 가장 대표적인 이유입니다. 더 많은 정보를 확인하고 SQL 활용 능력을 높여보세요.

SQL 서브쿼리 기본 구조

SQL 서브쿼리 기본 문법은 다음과 같습니다.

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

괄호 안에 작성된 SQL 문이 SQL 서브쿼리입니다.

일반적으로 SQL 서브쿼리는 먼저 실행된 후 바깥쪽 SQL이 실행됩니다.

SQLD 시험에서도 실행 순서를 묻는 문제가 자주 출제됩니다. 더 많은 정보를 확인하고 SQL 실행 원리를 이해해보세요.

단일행 서브쿼리

단일행 서브쿼리는 결과가 하나의 행(Row)만 반환되는 서브쿼리입니다.

예시

SELECT *
FROM EMP
WHERE SAL = (
    SELECT MAX(SAL)
    FROM EMP
);

실행 과정

  1. MAX(SAL) 조회
  2. 최고 급여 반환
  3. 해당 직원 조회

결과는 최고 급여를 받는 직원 한 명이 조회됩니다.

SQLD 시험에서 가장 기본적으로 출제되는 SQL 서브쿼리 유형입니다. 더 많은 정보를 확인하고 SQL 서브쿼리 기초를 익혀보세요.

다중행 서브쿼리

다중행 서브쿼리는 여러 개의 행을 반환하는 서브쿼리입니다.

예시

SELECT *
FROM EMP
WHERE DEPTNO IN (
    SELECT DEPTNO
    FROM DEPT
);

서브쿼리 결과

10
20
30

여러 행이 반환되므로 IN 연산자를 사용해야 합니다.

SQLD 시험에서는 = 대신 IN을 사용해야 하는 상황을 자주 출제합니다. 더 많은 정보를 확인하고 SQLD 핵심 개념을 정리해보세요.

서브쿼리와 IN 함께 사용하기

실무에서 가장 많이 사용하는 형태 중 하나입니다.

SELECT *
FROM EMP
WHERE DEPTNO IN (
    SELECT DEPTNO
    FROM DEPT
    WHERE LOC = 'DALLAS'
);

위 SQL은 DALLAS 지역 부서 직원을 조회합니다.

SQL 서브쿼리와 IN 조합은 SQLD 시험에서도 높은 빈도로 등장합니다.

더 많은 정보를 확인하고 SQL 서브쿼리 활용법을 익혀보세요.

서브쿼리와 EXISTS 함께 사용하기

EXISTS는 데이터 존재 여부를 확인할 때 사용합니다.

SELECT *
FROM EMP E
WHERE EXISTS (
    SELECT 1
    FROM DEPT D
    WHERE E.DEPTNO = D.DEPTNO
);

조건을 만족하는 데이터가 존재하면 TRUE를 반환합니다.

대용량 데이터에서는 EXISTS가 성능상 유리한 경우도 있습니다.

더 많은 정보를 확인하고 SQL 성능 최적화 방법을 알아보세요.

상관 서브쿼리(Correlated Subquery)

SQLD 시험에서 난도가 높은 유형입니다.

상관 서브쿼리는 외부 쿼리의 값을 내부 쿼리에서 참조합니다.

예시

SELECT *
FROM EMP E
WHERE SAL >
(
    SELECT AVG(SAL)
    FROM EMP
    WHERE DEPTNO = E.DEPTNO
);

위 SQL은 각 부서 평균 급여보다 많이 받는 직원을 조회합니다.

외부 쿼리의 E.DEPTNO를 내부 쿼리에서 사용하고 있기 때문에 상관 서브쿼리라고 합니다.

더 많은 정보를 확인하고 SQLD 고난도 문제를 대비해보세요.

서브쿼리를 사용할 수 있는 위치

SQL 서브쿼리는 여러 위치에서 사용할 수 있습니다.

위치사용 가능 여부
SELECT 절가능
FROM 절가능
WHERE 절가능
HAVING 절가능

예시

WHERE 절 서브쿼리

SELECT *
FROM EMP
WHERE DEPTNO =
(
    SELECT DEPTNO
    FROM DEPT
    WHERE DNAME='SALES'
);

FROM 절 서브쿼리

SELECT *
FROM (
    SELECT *
    FROM EMP
);

FROM 절에 사용하는 서브쿼리는 인라인 뷰(Inline View)라고 부릅니다.

SQLD 시험에서 자주 등장하는 용어입니다. 더 많은 정보를 확인하고 SQLD 핵심 개념을 학습해보세요.

SQL 서브쿼리 사용 시 주의사항

SQL 서브쿼리를 사용할 때 초보자가 자주 실수하는 부분이 있습니다.

단일행 서브쿼리에 다중행 결과 반환

잘못된 예시

SELECT *
FROM EMP
WHERE DEPTNO =
(
    SELECT DEPTNO
    FROM DEPT
);

서브쿼리 결과가 여러 건이면 오류가 발생합니다.

이 경우 IN을 사용해야 합니다.

괄호 누락

SQL 서브쿼리는 반드시 괄호로 감싸야 합니다.

SQLD 시험에서도 오류 유형으로 자주 출제됩니다.

더 많은 정보를 확인하고 SQL 오류를 예방해보세요.

SQLD 시험에서 서브쿼리가 중요한 이유

SQLD 시험에서는 SQL 서브쿼리 문제가 매우 높은 비중으로 출제됩니다.

특히 다음 개념은 반드시 이해해야 합니다.

출제 포인트중요도
단일행 서브쿼리매우 높음
다중행 서브쿼리매우 높음
IN 연산자매우 높음
EXISTS높음
상관 서브쿼리매우 높음
인라인 뷰매우 높음

실제 SQLD 기출문제를 보면 SQL 서브쿼리는 거의 매회 출제됩니다.

더 많은 정보를 확인하고 SQLD 합격 전략을 세워보세요.

자주 묻는 질문(FAQ)

SQL 서브쿼리와 JOIN 중 무엇을 사용해야 하나요?

상황에 따라 다르지만 실무에서는 JOIN을 더 많이 사용합니다. 다만 SQLD 시험에서는 두 가지 모두 중요합니다. 더 많은 정보를 확인하고 JOIN과 서브쿼리 차이를 이해해보세요.

SQL 서브쿼리는 SQLD 시험에 많이 나오나요?

네. SQLD 핵심 출제 영역 중 하나입니다. 더 많은 정보를 확인하고 SQLD 기출문제를 분석해보세요.

상관 서브쿼리는 꼭 알아야 하나요?

네. SQLD 중상급 문제에서 자주 등장하는 개념입니다. 더 많은 정보를 확인하고 SQLD 고득점을 준비해보세요.

마무리

SQL 서브쿼리는 SQLD 시험과 실무에서 반드시 알아야 하는 핵심 SQL 문법입니다. 단일행 서브쿼리, 다중행 서브쿼리, EXISTS, 상관 서브쿼리, 인라인 뷰까지 이해하면 대부분의 SQL 조회 문제를 해결할 수 있습니다. SQLD를 준비하고 있다면 반드시 직접 예제를 실행해보며 SQL 서브쿼리 동작 원리를 익혀보시기 바랍니다. 더 많은 정보를 확인하고 다음 단계인 인라인 뷰(Inline View)도 함께 학습해보세요.

관련 글 보기