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으로 포함 여부만 확인하는 게 아니라, 최소/최대 기준으로 비교할 수 있어 훨씬 유연한 조건 설정이 가능합니다.
'컴퓨터 과학 > 데이터 베이스' 카테고리의 다른 글
| SQL Derived Table(파생 테이블)과 Alias의 필요성 (1) | 2025.08.18 |
|---|---|
| SQL 서브쿼리(Subquery)의 결과 형태 정리 (1) | 2025.08.18 |
| SQL 다양한 조인(Join) 연산 정리 (5) | 2025.08.18 |
| SQL 문 작성 순서와 실제 실행 순서 완전 정리 (1) | 2025.08.17 |
| SQL에서 GROUP BY 사용 시 반드시 지켜야 할 규칙 (2) | 2025.08.17 |