서브쿼리는 SQL 안에 또 다른 SQL을 넣어서 조건값을 직접 쓰지 않고 데이터로부터 가져오는 방식이다.
핵심은 하나다. 고정값 대신 “조회 결과”를 조건으로 쓰고 싶을 때 서브쿼리를 사용한다.
서브쿼리가 필요한 이유
일반 WHERE 조건은 보통 이렇게 쓴다.
height >= 180
하지만 이런 경우는 한계가 있다.
“김경호보다 키가 큰 사람”
이건 숫자가 아니라 데이터를 기준으로 비교해야 한다.
👉 이때 서브쿼리를 쓴다.
서브쿼리 기본 형태
select 컬럼
from 테이블
where 조건 >= (
select 값
from 테이블
where 조건
);
👉 괄호 안이 먼저 실행되고, 그 결과가 바깥 조건에 들어간다.
단일 값 서브쿼리
서브쿼리 결과가 1개 값이면 일반 비교가 가능하다.
select name, height
from usertbl
where height >= (
select height
from usertbl
where name = '김경호'
);
👉 의미
김경호의 키를 먼저 구하고 → 그 키 이상인 사람 조회
서브쿼리에서 중요한 조건
서브쿼리는 반드시 비교 가능한 형태여야 한다.
❌ 잘못된 예시
select name, height
from usertbl
where height >= (
select name, height
from usertbl
where name = '김경호'
);
👉 여러 컬럼 반환 → 비교 불가능 → 오류
결과가 여러 개일 때 문제
서브쿼리 결과가 여러 개면 문제가 생긴다.
height >= (여러 값)
👉 어떤 값과 비교해야 하는지 애매
이 경우는 비교 연산을 바꿔야 한다.
ANY | 하나라도 만족
select name, height
from usertbl
where height >= any (
select height
from usertbl
where addr = '경남'
);
👉 의미
경남 사람 중 누구 한 명보다라도 크면 조회
하나라도 만족하면 OK
ALL | 전부 만족
select name, height
from usertbl
where height >= all (
select height
from usertbl
where addr = '경남'
);
👉 의미
경남 사람 모든 사람보다 커야 조회
모두 만족해야 OK
ANY vs ALL 차이
연산 의미
| ANY | 하나라도 만족 |
| ALL | 전부 만족 |
ANY → 느슨한 조건
ALL → 엄격한 조건
서브쿼리 핵심 정리
1. 서브쿼리는 조건값을 데이터에서 가져오는 방식
2. 단일 값이면 일반 비교 가능
3. 여러 값이면 ANY / ALL / IN 사용
언제 쓰는가
서브쿼리는 이런 상황에서 쓴다.
- 특정 기준값을 직접 모를 때
- 다른 데이터 기준으로 비교할 때
- 집계 결과를 조건으로 쓸 때
👉 즉, “조건값을 계산해서 쓰고 싶을 때”
서브쿼리는 조건값을 직접 쓰는 대신, 다른 쿼리 결과를 가져와 비교하는 방식이다.
'Data Analytics > SQL' 카테고리의 다른 글
| SQL WHERE와 HAVING 차이 정리 | 원본 데이터 필터와 집계 결과 필터 (0) | 2026.05.19 |
|---|---|
| SQL GROUP BY와 집계 함수 정리 | SUM, AVG, COUNT로 데이터 요약하기 (0) | 2026.05.19 |
| SQL WHERE 조건절 정리 | AND, BETWEEN, IN, LIKE, IS NULL 한 번에 이해하기 (0) | 2026.05.18 |
| SQL INSERT와 SELECT 기본 정리 | 데이터 입력과 조회 흐름 이해하기 (0) | 2026.05.18 |
| SQL CREATE TABLE 정리 | 데이터베이스와 테이블 생성 기본 문법 (0) | 2026.05.15 |
