컴퓨터 과학/데이터 베이스

SQL 서브쿼리와 ANY, ALL 키워드

Data Jun 2025. 8. 18. 12:31

SQL에서 서브쿼리는 하나의 컬럼에 여러 개의 값을 반환할 수 있습니다. 이전에는 IN과 함께 사용해서 "이 값들 중에 포함되면" 이라는 조건을 줄 수 있었죠. 그런데 IN 말고도 서브쿼리와 함께 자주 쓰이는 키워드들이 있습니다. 바로 ANY(또는 SOME)와 ALL입니다.

 

ANY (또는 SOME)

  • 의미: 서브쿼리 결과 값들 중 하나라도 조건을 만족하면 TRUE
  • 동작 원리: WHERE 값 > ANY(서브쿼리) → 서브쿼리 결과 중 최솟값보다 크면 조건 충족
SELECT *
FROM codeit_theater
WHERE view_count > ANY (
    SELECT view_count
    FROM codeit_theater
    WHERE category = 'Action'
)
AND category != 'Action';

위 쿼리는 액션 영화들의 관객 수 중 최솟값보다 큰 영화를(단, 액션 영화 제외) 조회합니다.
즉, 액션 영화 중 가장 작은 관객 수(예: 120000명)보다 큰 영화들을 찾는 거죠.

참고로 ANY 대신 **SOME**을 써도 동일하게 동작합니다.

 

ALL

  • 의미: 서브쿼리 결과 값들 모두에 대해서 조건을 만족해야 TRUE
  • 동작 원리: WHERE 값 > ALL(서브쿼리) → 서브쿼리 결과 중 최댓값보다 커야 조건 충족
SELECT *
FROM codeit_theater
WHERE view_count > ALL (
    SELECT view_count
    FROM codeit_theater
    WHERE category = 'Action'
)
AND category != 'Action';

위 쿼리는 액션 영화들의 관객 수 중 최댓값(예: 8500000명)보다 큰 영화만 조회합니다.
따라서 액션 영화보다 더 흥행한 영화만 남게 됩니다.

 

정리

  • ANY (또는 SOME) : "여러 값 중 하나라도 만족하면 TRUE" → 사실상 최솟값 기준 비교
  • ALL : "여러 값 모두 만족해야 TRUE" → 사실상 최댓값 기준 비교

이렇게 ANY와 ALL을 사용하면, 단순히 IN으로 포함 여부만 확인하는 게 아니라, 최소/최대 기준으로 비교할 수 있어 훨씬 유연한 조건 설정이 가능합니다.