Database/Mysql

[MySQL][SQL] 3. Subquery

noahkim_ 2026. 3. 5. 15:16

1. Subquery

  • SQL 문 안에 포함된 또 다른 SELECT 문
  •  결과 기반 처리 (다른 쿼리 결과를 조건으로 사용)
  • ✅ 중첩 가능

 

종류

구분 정의 특징
Nested Subquery WHERE 절 내부에 작성되는 서브쿼리 조건 필터링에 사용, 여러 행 반환 가능
Scalar Subquery 하나의 값만 반환하는 서브쿼리 반환값 1행 1열, 여러 값 반환 시 오류
FROM Subquery FROM 절에 작성되는 서브쿼리 가상 테이블 생성, alias 필수, JOIN 가능
Correlated Subquery 외부 쿼리의 값을 사용하는 서브쿼리 외부값 참조, 행마다 실행, 성능이 JOIN보다 느릴 수 있음

 

코드) Nested Subquery

더보기
SELECT *
FROM employees
WHERE department_id IN (
    SELECT department_id
    FROM departments
);

 

코드) Scalar Subquery

더보기
SELECT name,
       (SELECT AVG(salary) FROM employees) AS avg_salary
FROM employees;

 

코드) FROM Subquery

더보기
SELECT *
FROM (
    SELECT department_id, AVG(salary) avg_sal
    FROM employees
    GROUP BY department_id
) t
WHERE avg_sal > 5000;

 

코드) Correlated Subquery

더보기
SELECT *
FROM employees e
WHERE salary > (
    SELECT AVG(salary)
    FROM employees
    WHERE department_id = e.department_id
);

 

2. 연산자

연산자 설명
= 단일 값 비교
IN 여러 값 비교
ANY 조건 중 하나
ALL 모든 조건
EXISTS 존재 여부

 

코드) ANY

더보기
SELECT *
FROM employees
WHERE salary > ANY (
    SELECT salary
    FROM employees
);
  • 한 샐러리가 어떤 샐러리보다 큰 경우가 있으면 참

 

코드) ALL

더보기
SELECT *
FROM employees
WHERE salary >= ALL (
    SELECT salary
    FROM employees
);
  • 모든 샐러리보다 큰 샐러리는 참 (최대값)

 

코드) EXISTS

더보기
SELECT *
FROM employees e
WHERE EXISTS (
    SELECT 1
    FROM departments d
    WHERE e.department_id = d.id
);