SQL 서브쿼리 정리 | 쿼리 안에 쿼리를 넣는 이유와 ANY, ALL 차이

서브쿼리는 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 사용

언제 쓰는가

서브쿼리는 이런 상황에서 쓴다.

  • 특정 기준값을 직접 모를 때
  • 다른 데이터 기준으로 비교할 때
  • 집계 결과를 조건으로 쓸 때

👉 즉, “조건값을 계산해서 쓰고 싶을 때”


서브쿼리는 조건값을 직접 쓰는 대신, 다른 쿼리 결과를 가져와 비교하는 방식이다.