SQL 기본 서브쿼리 - 단일 값, IN, ALL, ANY
요약
독립적으로 실행할 수 있는 서브쿼리와 IN, ALL, ANY, 인라인 뷰를 학습합니다.
JOIN은 테이블을 결합하고, 서브쿼리는 SQL 안에서 다른 조회 결과를 사용합니다. 여러 겹의 조회나 바깥 행을 참조하는 형태는 고급 서브쿼리에서 다룹니다.
서브쿼리 (Subquery)
다른 SQL문 안에 포함된 SELECT문을 서브쿼리라고 합니다. 먼저 안쪽 서브쿼리가 실행되어 결과를 만들고, 그 결과를 바깥 쿼리에서 사용합니다.
WHERE ... IN (서브쿼리)
서브쿼리의 결과 목록에 포함되는 행만 조회합니다.
예시:
인라인 뷰 (Inline View) - FROM 절 서브쿼리
FROM 절 안에 서브쿼리를 넣어 그 결과를 임시 테이블처럼 사용합니다. 외부에서는 진짜 테이블인 것처럼 보이지만, 실제로는 메모리상에만 존재합니다.
예시:
사원 테이블:
| 사원번호 | 이름 | 부서번호 | 급여 |
|---|---|---|---|
| 1 | 김감자 | 10 | 3000 |
| 2 | 이고구마 | 10 | 4000 |
| 3 | 박옥수수 | 20 | 3500 |
| 4 | 최참외 | 20 | 2500 |
단계별 풀이:
1단계 인라인 뷰 먼저 실행 — 사원 테이블을 부서별로 묶어 평균 급여를 계산합니다. 결과가 부서평균이라는 임시 테이블이 됩니다:
| 부서번호 | 평균급여 |
|---|---|
| 10 | 3500 |
| 20 | 3000 |
2단계 바깥 쿼리가 부서평균을 일반 테이블처럼 조회 — WHERE 평균급여 >= 3000 조건으로 필터링합니다.
최종 결과:
| 부서번호 | 평균급여 |
|---|---|
| 10 | 3500 |
| 20 | 3000 |
ALL / ANY 연산자
서브쿼리 결과의 모든 값 또는 하나 이상의 값과 비교합니다.
| 연산자 | 의미 |
|---|---|
| ALL | 서브쿼리의 모든 값과 비교 (모두 만족해야 참) |
| ANY (= SOME) | 서브쿼리의 하나라도 만족하면 참 |
ALL 단계별 풀이:
① 서브쿼리 실행: SELECT 무게 FROM 감자 WHERE 농장 = 'A' → 결과: (100, 150)
② 무게 > ALL (100, 150) = 무게 > 100 AND 무게 > 150 = 무게 > 150 (모든 값보다 커야 하므로 가장 큰 값인 150보다 커야 함)
③ 무게가 150보다 큰 감자만 최종 결과에 포함
ANY 예시:
A농장 감자 무게가 100, 150이면, 무게 > ANY (100, 150) = 무게 > 100 OR 무게 > 150 = 무게 > 100 (하나라도 만족하면 되므로 가장 작은 값인 100보다 크면 됨)