현재 선택한 SQL 과정

SQLP 이론 학습

이론 목록으로 돌아가기

WHERE 조건식과 연산자

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

예상 읽기 6

핵심 요약

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

핵심 질문

  1. WHERE 조건식과 연산자에서 반드시 구분해야 할 개념과 결과 규칙은 무엇인가?
  2. 0건·1건·여러 건과 NULL·동점·중복 데이터에서 결과가 어떻게 달라지는가?
  3. 비슷해 보이는 문법과 결과가 같아지는 조건, 달라지는 조건은 무엇인가?
  4. 작은 샘플 데이터를 이용해 결과를 실수 없이 예측하는 순서는 무엇인가?

학습 목표

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

개념 지도

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
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 형태는 마지막 날의 대부분을 빠뜨릴 수 있다. 시작 이상, 다음 경계 미만의 반개방 구간이 안전하다.

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

SQL코드 영역 안에서 좌우로 이동할 수 있습니다.
WHERE region = 'SEOUL'
  AND (grade = 'A' OR vip_yn = 'Y')

흔한 오해와 주의점

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

문항 풀이 보강: 조건의 경계와 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으로 표시하면 실수를 줄일 수 있다.

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 처리, 문자 정렬 규칙, 날짜의 시간 부분과 경계 포함 여부가 동일한지 먼저 검증한다.


결과를 검증하는 순서

  1. 각 Query Block이 만드는 한 행의 의미를 먼저 적습니다.
  2. 조건을 적용하기 전 원본 행과 적용 후 남는 행을 작은 표로 그립니다.
  3. NULL 비교가 TRUE, FALSE, UNKNOWN 중 무엇인지 구분합니다.
  4. 중복 제거, 그룹화, 정렬과 행 제한이 적용되는 순서를 확인합니다.
  5. 데이터가 0건·1건·여러 건일 때도 같은 규칙이 성립하는지 검증합니다.

실무와 시험에서 함께 확인할 항목

  • ORDER BY가 없다면 결과 순서를 가정하지 않습니다.
  • 문자열·숫자·날짜 비교에서는 데이터 타입과 명시적 형변환을 확인합니다.
  • 같은 결과처럼 보이는 SQL도 NULL과 중복이 있을 때 달라질 수 있습니다.
  • 문법을 외우기 전에 샘플 데이터 3~5행으로 결과를 직접 계산합니다.

마지막 점검

  • 작성 순서가 아니라 SQL의 논리적 처리 순서로 결과를 계산합니다.
  • NULL을 0이나 빈 값과 같은 것으로 취급하지 않습니다.
  • ORDER BY가 없는 결과 순서와 DISTINCT 없는 중복 제거를 가정하지 않습니다.
  • 비슷한 문법은 0건·다건·NULL 데이터를 넣어 결과가 정말 같은지 확인합니다.

복습 문제

  1. A OR B AND C에서 먼저 평가되는 연산은?
  2. 7월 전체 DATE 값을 안전하게 조회하는 경계 조건은?
  3. 샘플 데이터 3행으로 결과를 직접 계산할 수 있는가?
  4. NULL이 포함될 때 결과가 달라지는 지점은 어디인가?