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
);