서브쿼리(Subquery) 는 다른 SQL 안에 들어간 SELECT 문 입니다. "어디에 놓이는지(위치)"와 "몇 행을 반환하는지(연산자)"를 정확히 구분하는 게 시험의 핵심입니다.
이 단원, 시험에서 어디에 나오나
- 제2과목 「SQL 기본 및 활용」의 빈출 단원입니다.
- 위치별 종류, 행수별 연산자, 그리고 단일행 연산자에 다중행이 오는 오류(ORA-01427) 가 단골입니다.
① 위치별 종류 — 어디에 놓이나
그림 1. SELECT=스칼라, FROM=인라인뷰, WHERE=중첩. 위치로 종류가 나뉩니다. (자작 도식)
| 위치 | 종류 | 특징 |
|---|---|---|
| SELECT | 스칼라 서브쿼리 | 1행 1열 만 반환 |
| FROM | 인라인 뷰 | 표처럼 사용(별칭) |
| WHERE | 중첩 서브쿼리 | 조건에 사용 |
- 상관 서브쿼리: 메인쿼리의 컬럼을 참조해 행마다 다시 평가(주로
EXISTS와 결합).
② 행수별 연산자 — 단일행 vs 다중행
서브쿼리가 몇 행을 반환하느냐 에 따라 쓰는 연산자가 다릅니다.
그림 2. 단일행==,<,>, 다중행=IN·ANY·ALL·EXISTS. 단일행 연산자에 여러 행이 오면 오류입니다. (자작 도식)
- 단일행 서브쿼리(1행):
=,<,>,<=,>=,<> - 다중행 서브쿼리(여러 행):
IN,ANY,ALL,EXISTS
③ ANY · ALL 의 의미
> ANY (집합): 집합의 최솟값보다 크면 참(하나라도 만족).> ALL (집합): 집합의 최댓값보다 크면 참(전부 만족).- 반대로
< ANY= 최댓값 미만,< ALL= 최솟값 미만.
자주 틀리는 함정
= (다중행 서브쿼리)→ ORA-01427(단일행 하위 질의에 하나 이상의 행 반환). 다중행이면IN등을 써야 함.NOT IN (…, NULL)→ 전체가 UNKNOWN이 되어 결과 0건(전멸).>ALL↔>ANY혼동 — ALL=최댓값 기준, ANY=최솟값 기준.- 스칼라 서브쿼리가 2행 이상 반환 → 오류(1행 1열이어야 함).
한 장 정리 (암기 카드)
- 위치: SELECT=스칼라(1행1열)·FROM=인라인뷰·WHERE=중첩.
- 행수: 단일행
=,<,>/ 다중행IN·ANY·ALL·EXISTS. >ANY=최솟값 초과 ·>ALL=최댓값 초과.- 단일행 연산자에 다중행 → ORA-01427.
NOT IN에 NULL 섞이면 전멸.
참고 출처
- 시험 과목·출제기준: 한국데이터산업진흥원(KDATA) 데이터자격검정 (2026년 7월 확인)
- 서브쿼리 종류·연산자 동작은 ANSI SQL·오라클 표준에 근거하며, 본문 설명·예시·도식은 자작입니다.