SQL 기본 및 활용

WHERE절과 연산자 — SQLD, NULL과 AND·OR 우선순위 함정

CBT 전자문제집 편집팀
#SQLD#WHERE##ISNULL#연산자우선순위#NOTIN

WHERE절은 조회할 행을 조건으로 거릅니다. 조건이 참(TRUE) 인 행만 남는데, SQLD는 이 "참/거짓"이 흔들리는 NULL연산자 우선순위를 집요하게 묻습니다.

이 단원, 시험에서 어디에 나오나 (출제 비중)

  • 제2과목 「SQL 기본 및 활용」 = 40문항 · 80점. WHERE 조건은 거의 모든 조회·조인 문제에 들어갑니다.
  • 특히 NULL 비교AND/OR 우선순위는 "이 SQL의 결과 행은?" 유형에서 오답을 유도하는 단골입니다. (단원별 문항수는 공개되지 않습니다 — 출처: KDATA 출제기준.)

출제 포인트 — 시험이 실제로 묻는 것

  1. NULL은 IS NULL로만= NULL은 결과가 없다 (최다 함정)
  2. 논리 연산자 우선순위 NOT → AND → OR
  3. NOT IN에 NULL이 섞이면 결과가 사라진다
  4. 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

WHERE 논리 연산자 우선순위: 괄호가 최우선, 그다음 비교·SQL 연산자, NOT, AND, OR 순서이며, A OR B AND C는 A OR (B AND C)로 해석되고 NULL은 IS NULL로 비교해야 함을 보여주는 도식

그림 1. 위에서 아래로 먼저 묶입니다. 괄호가 최우선, 그다음 비교연산, 그리고 NOT → AND → OR. (자작 도식)

ANDOR보다 먼저 묶입니다. 그래서 아래 두 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 ba 이상 b 이하(경계 포함)
IN (…)목록 중 하나(OR 연쇄)
LIKE '김%'패턴(%=0글자↑, _=1글자)
IS NULLNULL 여부

한 장 정리 (암기 카드)

  • NULL은 IS NULL(= NULL은 결과 0건, UNKNOWN).
  • 우선순위 NOT > AND > OR → 의도한 묶음은 괄호로.
  • NOT IN (…NULL) = 전멸NOT EXISTS로.
  • BETWEEN 경계 포함, LIKE %(다수)·_(하나).

참고 출처

CBT 전자문제집 편집팀

자격증 개념과 기출 유형을 쉽게 정리합니다.

관련 글