본문 바로가기
자격증 준비/SQLD

서브쿼리란 무엇인가: SQL 초보자도 이해하는 개념과 종류 정리

by 코딩사무소장 2026. 3. 13.
반응형

서브쿼리란 무엇인가: SQL 초보자도 이해하는 개념과 종류 정리

SQL을 공부하다 보면 서브쿼리라는 개념이 자주 등장합니다. 처음에는 쿼리 안에 또 다른 쿼리가 들어간다는 말 자체가 어렵게 느껴질 수 있습니다. 결론부터 말하면 서브쿼리는 하나의 SQL문 안에서 보조 역할을 하는 내부 쿼리입니다. 이 글에서는 SQL 초보자와 SQLD 준비생이 헷갈리지 않도록 서브쿼리의 의미, 왜 필요한지, 종류, 자주 하는 실수까지 한 번에 정리해보겠습니다.

이 글은 이런 분께 추천합니다
  • 서브쿼리가 왜 필요한지부터 헷갈리는 분
  • 단일행 서브쿼리와 다중행 서브쿼리 차이를 정리하고 싶은 분
  • SQLD에서 서브쿼리 문제를 자주 틀리는 분
  • SELECT, WHERE 안에 쿼리가 들어가는 구조가 낯선 비전공자

서브쿼리란 무엇인가

서브쿼리는 메인 쿼리 안에 들어가는 작은 쿼리입니다.

보통 메인 쿼리가 최종 결과를 가져오는 역할을 하고, 서브쿼리는 그 메인 쿼리를 도와주는 중간 계산이나 조건 확인 역할을 합니다.

쉽게 말하면 서브쿼리는 “결과를 얻기 위해 먼저 구해두는 내부용 쿼리”라고 생각하면 됩니다.

왜 서브쿼리가 필요할까

SQL을 작성하다 보면 “먼저 어떤 값을 구한 다음, 그 값을 기준으로 다시 조회”해야 하는 경우가 많습니다.

예를 들어 평균 급여보다 높은 직원만 조회하고 싶다고 해보겠습니다. 그러면 먼저 평균 급여를 구한 뒤, 그 결과를 기준으로 직원을 찾아야 합니다. 이럴 때 서브쿼리를 쓰면 자연스럽게 해결할 수 있습니다.

  • 조건에 필요한 값을 먼저 구할 때
  • 집계 결과를 기준으로 다시 조회할 때
  • 한 번에 쓰기 어려운 쿼리를 단계적으로 나눌 때
  • 메인 쿼리의 가독성을 높이고 싶을 때

서브쿼리 예제를 먼저 보면 쉽다

가장 대표적인 예시는 평균보다 높은 급여를 받는 직원을 조회하는 경우입니다.

SELECT name, salary
FROM employees
WHERE salary > (
  SELECT AVG(salary)
  FROM employees
);

여기서 바깥쪽 쿼리는 메인 쿼리이고, 괄호 안의 쿼리는 서브쿼리입니다.

흐름은 이렇게 이해하면 됩니다.

  1. 서브쿼리에서 평균 급여를 구한다
  2. 메인 쿼리에서 그 값보다 큰 salary를 가진 직원만 조회한다

서브쿼리는 어디에 들어갈 수 있을까

서브쿼리는 보통 아래 위치에 들어갈 수 있습니다.

  • WHERE절: 조건 비교용
  • FROM절: 임시 테이블처럼 사용
  • SELECT절: 값 계산용

입문 단계에서는 특히 WHERE절 서브쿼리를 가장 먼저 익히는 것이 좋습니다.

단일행 서브쿼리란

단일행 서브쿼리는 결과가 한 행만 나오는 서브쿼리입니다.

예를 들어 평균값, 최대값, 특정 한 사람의 부서번호처럼 결과가 하나만 나오는 경우가 여기에 해당합니다.

SELECT name
FROM employees
WHERE department_id = (
  SELECT department_id
  FROM employees
  WHERE name = '김철수'
);

이 경우 서브쿼리가 department_id 하나만 반환한다고 가정하면 단일행 서브쿼리입니다.

단일행 서브쿼리에서 자주 쓰는 비교 연산자

  • =
  • >
  • <
  • >=
  • <=

다중행 서브쿼리란

다중행 서브쿼리는 결과가 여러 행 나오는 서브쿼리입니다.

예를 들어 특정 조건을 만족하는 부서번호가 여러 개 나올 수 있다면, 그 서브쿼리는 다중행 서브쿼리입니다.

SELECT name
FROM employees
WHERE department_id IN (
  SELECT department_id
  FROM departments
  WHERE location = '서울'
);

여기서는 서울에 있는 부서번호가 여러 개일 수 있으므로 다중행 서브쿼리입니다.

다중행 서브쿼리에서 자주 쓰는 연산자

  • IN
  • ANY
  • ALL
  • EXISTS

FROM절 서브쿼리는 어떻게 이해하면 좋을까

FROM절에 들어가는 서브쿼리는 임시 테이블처럼 만들어서 사용하는 방식이라고 이해하면 쉽습니다.

SELECT dept_avg.department_id, dept_avg.avg_salary
FROM (
  SELECT department_id, AVG(salary) AS avg_salary
  FROM employees
  GROUP BY department_id
) dept_avg;

이 경우 괄호 안에서 부서별 평균 급여를 먼저 구한 뒤, 바깥쪽 쿼리에서 그것을 하나의 테이블처럼 다루고 있습니다.

서브쿼리를 표로 정리하면

구분 설명 주요 예시
WHERE절 서브쿼리 조건 비교용 평균보다 큰 값 찾기
FROM절 서브쿼리 임시 테이블처럼 사용 집계 결과를 다시 조회
단일행 서브쿼리 결과가 한 행 =, >, <
다중행 서브쿼리 결과가 여러 행 IN, ANY, ALL

초보자가 자주 하는 실수

자주 하는 실수 1

여러 행이 나오는 서브쿼리에 = 연산자를 쓰는 것

결과가 여러 개 나오는데 = 로 비교하면 오류가 날 수 있습니다. 이런 경우에는 IN 같은 연산자를 써야 합니다.

자주 하는 실수 2

서브쿼리를 무조건 어렵게 생각하는 것

실제로는 “먼저 값 하나 구하고, 그걸로 다시 찾는다”는 흐름으로 이해하면 생각보다 단순합니다.

자주 하는 실수 3

FROM절 서브쿼리를 일반 테이블과 완전히 다르게 생각하는 것

FROM절 서브쿼리는 “잠깐 만들어 쓰는 테이블”이라고 이해하면 훨씬 쉽습니다.

비전공자는 이렇게 외우면 쉽다

  • 서브쿼리 = 메인 쿼리를 도와주는 내부 쿼리
  • 단일행 서브쿼리 = 결과 1개
  • 다중행 서브쿼리 = 결과 여러 개
  • “먼저 구하고, 나중에 쓴다”는 흐름으로 이해하면 쉽습니다.

핵심 요약

  • 서브쿼리는 메인 쿼리 안에 들어가는 보조 쿼리입니다.
  • 조건 비교, 집계 결과 활용, 임시 테이블 생성 등에 자주 쓰입니다.
  • 단일행 서브쿼리는 결과가 1개, 다중행 서브쿼리는 결과가 여러 개입니다.
  • 다중행 서브쿼리에는 IN, ANY, ALL 같은 연산자를 자주 씁니다.
  • 서브쿼리는 “먼저 값 구하기”라고 이해하면 훨씬 쉬워집니다.

FAQ

서브쿼리는 왜 필요한가요?

조건에 필요한 값을 먼저 구하거나, 집계 결과를 기준으로 다시 조회해야 할 때 유용하기 때문입니다.

서브쿼리는 무조건 WHERE절에만 쓰나요?

아닙니다. WHERE절, FROM절, SELECT절 등 여러 위치에서 사용할 수 있습니다.

단일행 서브쿼리와 다중행 서브쿼리 차이는 무엇인가요?

결과가 한 행이면 단일행 서브쿼리, 여러 행이면 다중행 서브쿼리입니다.

다중행 서브쿼리에 = 를 쓰면 안 되나요?

여러 값이 나올 수 있기 때문에 보통 IN, ANY, ALL 같은 연산자를 사용해야 합니다.

SQLD에서도 서브쿼리가 자주 나오나요?

네. SQL 기본 문법과 함께 자주 나오며, 단일행/다중행 구분도 중요합니다.

반응형