WHERE 조건식과 연산자

SQL 기본 및 활용 · WHERE 절

이 페이지의 목차

핵심 요약

비교·BETWEEN·IN·LIKE·IS NULL과 AND·OR·NOT 우선순위를 결과 집합 관점에서 익힌다.

조건의 3값 논리와 연산자 우선순위는 SQL 공통 판단에 사용한다. 날짜 리터럴·정규식·문자 비교 세부 동작은 시험에서 지정한 DBMS와 세션 설정을 확인한다.

학습 목표

  • 주요 조건 연산자의 경계와 NULL 동작을 설명한다.
  • 복합 조건을 괄호로 명확하게 작성한다.

본문

개념 지도

도식
FROM에서 행 집합 생성→WHERE 행 필터→GROUP/HAVING→SELECT→ORDER BY

핵심 내용

BETWEEN a AND b는 일반적으로 양 끝값을 포함한다. IN은 여러 등치 조건의 집합이며, LIKE에서 %는 길이 0개 이상, _는 정확히 한 문자를 뜻한다. NULL은 IS NULL, IS NOT NULL로 검사한다.

SQL
WHERE order_dt >= DATE '2026-07-01'
  AND order_dt <  DATE '2026-08-01'
  AND status IN ('PAID', 'SHIPPED')

시간까지 저장된 날짜 컬럼을 하루 범위로 조회할 때 BETWEEN 00:00:00 AND 00:00:00 형태는 마지막 날의 대부분을 빠뜨릴 수 있다. 시작 이상, 다음 경계 미만의 반개방 구간이 안전하다.

논리 연산자의 일반 우선순위는 NOT → AND → OR다. 의도가 섞인 조건은 괄호로 직접 표현한다.

SQL
WHERE region = 'SEOUL'
  AND (grade = 'A' OR vip_yn = 'Y')

3값 논리로 조건 계산하기

SQL 조건 결과는 TRUE·FALSE뿐 아니라 UNKNOWN이 있다.

식값이 10값이 20값이 NULL
col = 10TRUEFALSEUNKNOWN
col <> 10FALSETRUEUNKNOWN
col IS NULLFALSEFALSETRUE
col IN (10,20)TRUETRUEUNKNOWN

WHERE는 TRUE인 행만 남긴다. UNKNOWN은 FALSE와 마찬가지로 결과에서 제외되지만 논리 조합에서는 차이를 만든다.

연산자별 점검표

연산자핵심 경계자주 나는 오류
BETWEEN양 끝 포함DATE의 마지막 날 시간 누락
LIKE 'ABC%'접두어 범위%ABC는 시작점 탐색 어려움
IN여러 등치 후보NULL이 섞인 NOT IN 오해
AND/ORNOT→AND→OR괄호 누락으로 조건 의미 변경

날짜 반개구간

SQL
WHERE created_at >= TIMESTAMP '2026-07-27 00:00:00'
  AND created_at <  TIMESTAMP '2026-07-28 00:00:00'

23:59:59를 직접 만들면 Fractional Second를 빠뜨릴 수 있다. 시작 이상·다음 경계 미만은 DATE와 TIMESTAMP 모두에서 안전하다.

조건식 작성 원칙

조건식을 바꿀 때는 NULL 처리, 문자 정렬 규칙, 날짜의 시간 부분과 경계 포함 여부가 동일한지 먼저 검증한다.


시험 포인트

문자 컬럼으로 년, 월이 따로 저장되어 있으면 다음처럼 연도와 월을 독립된 BETWEEN으로 비교해서는 연도 경계를 올바르게 표현할 수 없다.

SQL
-- 잘못된 접근
WHERE year BETWEEN '2014' AND '2015'
  AND month BETWEEN '11' AND '03'

201411처럼 비교 가능한 하나의 키로 만들거나 날짜로 변환해 시작 이상·종료 미만을 사용한다.

SQL
WHERE sale_month >= '201411'
  AND sale_month <= '201503'

LIKE, IN, BETWEEN과 일반 비교에서도 NULL 결과는 UNKNOWN이다. IS NOT NULL은 NULL이 아닌 행을 찾는 올바른 표준 조건이다.

논리 연산은 괄호를 먼저, 그다음 NOT → AND → OR 순서로 평가한다. 결과 건수 문제에서는 각 행마다 조건을 TRUE·FALSE·UNKNOWN으로 표시하면 실수를 줄일 수 있다.

자주 틀리는 부분

  • BETWEEN은 경계를 포함하지만 날짜의 시간 부분까지 자동으로 하루 끝으로 바꿔주지 않는다.
  • NOT IN과 NULL 조합은 UNKNOWN을 만들 수 있다.
  • 선두 와일드카드 LIKE '%ABC'는 문자열의 끝이 ABC인 값을 찾는 조건이다.

복습 문제

답을 생각한 뒤 정답과 근거를 펼쳐 보세요.

01

A OR B AND C에서 먼저 평가되는 연산은?

정답과 근거

AND가 OR보다 먼저 평가됩니다. 의도를 명확히 하려면 괄호를 씁니다.

02

7월 전체 DATE 값을 안전하게 조회하는 경계 조건은?

정답과 근거

date_col >= DATE '2026-07-01' AND date_col < DATE '2026-08-01'처럼 시작 이상·다음 달 시작 미만으로 조회합니다.

03

created_at이 TIMESTAMP일 때 7월의 마지막 초 이하 조건보다 다음 달 1일 미만 조건이 안전한 이유는?

정답과 근거

TIMESTAMP는 초보다 작은 단위도 저장할 수 있어 임의의 마지막 시각을 만들면 행을 빠뜨릴 수 있습니다. 다음 경계 미만은 저장 정밀도와 무관하게 전체 구간을 포함합니다.