WHERE절은 조회할 행을 조건으로 거릅니다. 조건이 참(TRUE) 인 행만 남는데, SQLD는 이 "참/거짓"이 흔들리는 NULL과 연산자 우선순위를 집요하게 묻습니다.
이 단원, 시험에서 어디에 나오나 (출제 비중)
- 제2과목 「SQL 기본 및 활용」 = 40문항 · 80점. WHERE 조건은 거의 모든 조회·조인 문제에 들어갑니다.
- 특히 NULL 비교와 AND/OR 우선순위는 "이 SQL의 결과 행은?" 유형에서 오답을 유도하는 단골입니다. (단원별 문항수는 공개되지 않습니다 — 출처: KDATA 출제기준.)
출제 포인트 — 시험이 실제로 묻는 것
- NULL은
IS NULL로만 —= NULL은 결과가 없다 (최다 함정) - 논리 연산자 우선순위
NOT → AND → OR NOT IN에 NULL이 섞이면 결과가 사라진다BETWEEN·IN·LIKE의 정확한 의미
① NULL은 = NULL이 아니라 IS NULL
관계형 DB의 비교는 참·거짓만이 아니라 UNKNOWN(알 수 없음) 이 있습니다. NULL과의 모든 비교(= NULL, != NULL)는 UNKNOWN 이고, WHERE는 참인 행만 남기므로 그 행은 결과에서 빠집니다.
WHERE 수당 = NULL -- ✘ UNKNOWN → 한 행도 안 나옴(오류 아님, 결과 0건)
WHERE 수당 IS NULL -- ✔ 수당이 NULL인 행
함정:
WHERE 수당 = NULL은 문법 오류가 아니라 결과가 0건입니다. 오류가 안 나서 더 헷갈립니다.
② 우선순위 — NOT → AND → OR
그림 1. 위에서 아래로 먼저 묶입니다. 괄호가 최우선, 그다음 비교연산, 그리고 NOT → AND → OR. (자작 도식)
AND가 OR보다 먼저 묶입니다. 그래서 아래 두 SQL은 결과가 다릅니다.
WHERE 부서 = 10 OR 부서 = 20 AND 급여 >= 5000
-- 해석: 부서=10 OR (부서=20 AND 급여>=5000)
WHERE (부서 = 10 OR 부서 = 20) AND 급여 >= 5000
-- 의도가 "(10 또는 20)이고 급여 5000 이상"이면 괄호 필수
③ NOT IN + NULL = 결과 사라짐
NOT IN (a, b, NULL) 은 내부적으로 <> a AND <> b AND <> NULL 로 동작하는데, <> NULL 이 UNKNOWN이라 AND 전체가 참이 될 수 없어 결과가 0건이 됩니다.
WHERE 부서 NOT IN (10, 20, NULL) -- ✘ 목록에 NULL → 결과 없음
-- 대안: NOT EXISTS 사용, 또는 목록에서 NULL 제거
④ 주요 연산자
| 연산자 | 의미 |
|---|---|
BETWEEN a AND b | a 이상 b 이하(경계 포함) |
IN (…) | 목록 중 하나(OR 연쇄) |
LIKE '김%' | 패턴(%=0글자↑, _=1글자) |
IS NULL | NULL 여부 |
한 장 정리 (암기 카드)
- NULL은
IS NULL(= NULL은 결과 0건, UNKNOWN). - 우선순위 NOT > AND > OR → 의도한 묶음은 괄호로.
NOT IN (…NULL)= 전멸 →NOT EXISTS로.BETWEEN경계 포함,LIKE%(다수)·_(하나).
참고 출처
- 시험 과목·배점: 한국데이터산업진흥원(KDATA) 데이터자격검정 (2026년 7월 확인)
- 3값 논리·연산자 우선순위는 표준 SQL·오라클 SQL에 근거하며, 본문 설명·도식·예시는 자작입니다.