핵심 요약
비교·BETWEEN·
조건의 3값 논리와 연산자 우선순위는 SQL 공통 판단에 사용한다. 날짜 리터럴·정규식·문자 비교 세부 동작은 시험에서 지정한 DBMS와 세션 설정을 확인한다.
학습 목표
- 주요 조건 연산자의 경계와 NULL 동작을 설명한다.
- 복합 조건을 괄호로 명확하게 작성한다.
본문
개념 지도
FROM에서 행 집합 생성→WHERE 행 필터→GROUP/HAVING→SELECT→ORDER BY핵심 내용
BETWEEN a AND b는 일반적으로 양 끝값을 포함한다. IN은 여러 등치 조건의 집합이며, LIKE에서 %는 길이 0개 이상, _는 정확히 한 문자를 뜻한다. NULL은 IS NULL, IS NOT NULL로 검사한다.
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다. 의도가 섞인 조건은 괄호로 직접 표현한다.
WHERE region = 'SEOUL'
AND (grade = 'A' OR vip_yn = 'Y')
3값 논리로 조건 계산하기
SQL 조건 결과는 TRUE·
| 식 | 값이 10 | 값이 20 | 값이 NULL |
|---|---|---|---|
col = 10 | TRUE | FALSE | UNKNOWN |
col <> 10 | FALSE | TRUE | UNKNOWN |
col IS NULL | FALSE | FALSE | TRUE |
col IN (10,20) | TRUE | TRUE | UNKNOWN |
WHERE는 TRUE인 행만 남긴다. UNKNOWN은 FALSE와 마찬가지로 결과에서 제외되지만 논리 조합에서는 차이를 만든다.
연산자별 점검표
| 연산자 | 핵심 경계 | 자주 나는 오류 |
|---|---|---|
BETWEEN | 양 끝 포함 | DATE의 마지막 날 시간 누락 |
LIKE 'ABC%' | 접두어 범위 | %ABC는 시작점 탐색 어려움 |
IN | 여러 등치 후보 | NULL이 섞인 NOT IN 오해 |
AND/OR | NOT→AND→OR | 괄호 누락으로 조건 의미 변경 |
날짜 반개구간
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으로 비교해서는 연도 경계를 올바르게 표현할 수 없다.
-- 잘못된 접근
WHERE year BETWEEN '2014' AND '2015'
AND month BETWEEN '11' AND '03'
201411처럼 비교 가능한 하나의 키로 만들거나 날짜로 변환해 시작 이상·종료 미만을 사용한다.
WHERE sale_month >= '201411'
AND sale_month <= '201503'
LIKE, IN, BETWEEN과 일반 비교에서도 NULL 결과는 UNKNOWN이다. IS NOT NULL은 NULL이 아닌 행을 찾는 올바른 표준 조건이다.
논리 연산은 괄호를 먼저, 그다음 NOT → AND → OR 순서로 평가한다. 결과 건수 문제에서는 각 행마다 조건을 TRUE·
자주 틀리는 부분
BETWEEN은 경계를 포함하지만 날짜의 시간 부분까지 자동으로 하루 끝으로 바꿔주지 않는다.NOT IN과 NULL 조합은 UNKNOWN을 만들 수 있다.- 선두 와일드카드
LIKE '%ABC'는 문자열의 끝이ABC인 값을 찾는 조건이다.
복습 문제
답을 생각한 뒤 정답과 근거를 펼쳐 보세요.
A OR B AND C에서 먼저 평가되는 연산은?
정답과 근거
AND가 OR보다 먼저 평가됩니다. 의도를 명확히 하려면 괄호를 씁니다.
7월 전체 DATE 값을 안전하게 조회하는 경계 조건은?
정답과 근거
date_col >= DATE '2026-07-01' AND date_col < DATE '2026-08-01'처럼 시작 이상·다음 달 시작 미만으로 조회합니다.
created_at이 TIMESTAMP일 때 7월의 마지막 초 이하 조건보다 다음 달 1일 미만 조건이 안전한 이유는?
정답과 근거
TIMESTAMP는 초보다 작은 단위도 저장할 수 있어 임의의 마지막 시각을 만들면 행을 빠뜨릴 수 있습니다. 다음 경계 미만은 저장 정밀도와 무관하게 전체 구간을 포함합니다.