2026 SQLD 필기 2과목 1장 4절 | WHERE·날짜 범위·연산자 우선순위 — 핵심 이론
데이터위자드 ·
필기 · 핵심 이론
WHERE에서는 비교·논리·패턴 조건을 조합합니다. 조건마다 TRUE인지 계산한 다음 AND·OR의 결합을 판단해야 합니다. 특히 날짜의 시간 부분, BETWEEN의 양끝 포함, 괄호 없는 OR가 결과를 바꾸는지 확인하세요.
AND와 OR · BETWEEN의 양끝 포함 · 월별 날짜 조회 · LIKE와 와일드카드 · IN과 조건 집합
1. AND와 OR
일반적인 우선순위에서 AND는 OR보다 먼저 결합합니다. A OR B AND C는 A OR (B AND C)입니다. 서울 또는 부산이면서 활성 회원을 찾으려면 (지역=서울 OR 지역=부산) AND 활성=1처럼 묶어야 합니다.
괄호는 사람의 의도를 드러내는 수단입니다. 조건이 길면 각 비교 결과를 적고, 괄호·NOT·AND·OR 순서로 평가해 보세요. NULL이 있다면 TRUE/FALSE 외에 UNKNOWN도 함께 고려합니다.
AND가 OR보다 우선하므로 필요한 논리 묶음은 괄호로 표시한다.
예제로 적용하기
지역이 서울이고 활성=0인 행에 지역=서울 OR 지역=부산 AND 활성=1을 적용하면?
풀이와 판단 과정
결론: 선택된다.
서울 조건이 TRUE이므로 OR 전체가 TRUE입니다. 활성 조건을 두 지역에 모두 적용하려면 괄호가 필요합니다.
2. BETWEEN의 양끝 포함
BETWEEN a AND b는 a 이상 b 이하입니다. 수량 BETWEEN 10 AND 20이면 10과 20을 모두 포함합니다. 두 경계가 거꾸로 주어지면 자동으로 정렬해 주는 것이 일반적인 규칙은 아닙니다.
날짜 컬럼에 시간이 있으면 종료일 자정까지 비교하는 조건은 그날 오후를 놓칩니다. 월별 조회는 시작일 이상·다음 달 시작일 미만의 반열린 구간으로 작성하면 시간 정밀도에 덜 의존합니다.
BETWEEN은 시작 값과 종료 값을 모두 포함한다.
예제로 적용하기
금액 BETWEEN 100 AND 200에서 포함되는 값은?
풀이와 판단 과정
결론: 100과 200 모두
BETWEEN은 >=100 AND <=200과 같은 경계 포함 의미입니다.
3. 월별 날짜 조회
11월 전체를 조회할 때 일시 >= 11월 1일 AND 일시 < 12월 1일로 표현하면 11월 30일의 모든 시간을 포함합니다. 11월 30일 00:00:00을 상한으로 둔 BETWEEN은 그 이후 시간을 놓칩니다.
끝을 23:59:59로 고정하는 방식은 소수 초 정밀도에서 누락이 생길 수 있습니다. 비교할 경계는 컬럼과 호환되는 날짜형 리터럴이나 명시적 변환으로 만들고 문자 정렬에 기대지 않는 편이 명확합니다.
월 전체의 일시는 다음 달 첫날 미만으로 조회할 수 있다.
예제로 적용하기
11월 30일 18:00을 포함하는 안전한 11월 조회 상한은?
풀이와 판단 과정
결론: 12월 1일 00:00 미만
다음 달 시작 미만이면 말일 오후와 소수 초가 있는 값도 포함할 수 있습니다.
4. LIKE와 와일드카드
%는 0개 이상 문자, _는 한 문자에 대응합니다. LIKE A%는 A로 시작하는 문자열을 찾고 LIKE A_는 A 뒤에 정확히 한 문자가 오는 값을 찾습니다. 실제 밑줄이나 퍼센트를 검색하려면 ESCAPE 등 제품 문법을 확인합니다.
패턴 비교와 정규표현식은 다른 기능입니다. 대소문자 구별은 문자 비교 설정에 따라 달라질 수 있습니다. 공백도 문자이므로 앞뒤 공백이 남아 있을 때의 결과를 살펴야 합니다.
LIKE의 _는 한 문자에 대응한다.
예제로 적용하기
LIKE 'A_'에 맞는 문자열은?
풀이와 판단 과정
결론: AB
A 뒤에 정확히 한 글자가 있으므로 AB가 일치합니다.
5. IN과 조건 집합
IN은 목록 중 일치하는 값이 있는지 검사합니다. 지역 IN (서울,부산)은 두 동등 비교를 OR로 묶은 것과 연결됩니다. 목록에 같은 값이 반복되어도 원본 행이 그 횟수만큼 복제되지는 않습니다.
서브쿼리의 결과를 목록으로 사용할 수도 있습니다. 다만 NOT IN과 NULL의 조합은 3값 논리를 다시 점검해야 합니다. 연산자 이름이 비슷하다고 IN을 조인과 동일한 행 생성 방식으로 이해하면 안 됩니다.
IN 목록의 값이 중복되어도 같은 원본 행이 자동으로 복제되지 않는다.
예제로 적용하기
id=1인 한 행에 WHERE id IN (1,1,2)를 적용하면?
풀이와 판단 과정
결론: 한 번 선택된다.
IN은 조건 판정이며 목록의 중복을 기준으로 결과 행을 증식시키지 않습니다.
한눈에 비교하기
| 조건 | 포함 범위 | 주의점 |
|---|---|---|
| BETWEEN 10 AND 20 | 10~20, 양끝 포함 | 경계 역전 금지 |
| LIKE 'A_' | A 뒤 한 문자 | %와 구별 |
| 월 시작 이상·다음 달 시작 미만 | 한 달의 모든 일시 | 시간 부분 보존 |
| A OR B AND C | A OR (B AND C) | 괄호로 의도 표시 |
순서대로 풀어 보는 예제
활성 고객 중 서울·부산 거주자를 찾는 조건은 (region IN (서울,부산)) AND active=1로 정리할 수 있습니다. 여기에 11월 가입자 조건을 붙이면 가입일시>=11월 1일 AND 가입일시<12월 1일을 추가합니다.
조건을 먼저 지역·활성·기간 세 묶음으로 나누고 표본 행을 하나씩 통과시켜 보세요. 서울·비활성 고객이나 부산·12월 가입 고객이 섞이는지 확인하면 괄호와 경계 오류를 발견하기 쉽습니다.
SELECT * FROM members
WHERE region IN ('서울','부산')
AND active = 1
AND joined_at >= TIMESTAMP '2026-11-01 00:00:00'
AND joined_at < TIMESTAMP '2026-12-01 00:00:00';헷갈리는 문장 바로잡기
AND와 OR
잘못된 판단 OR는 언제나 AND보다 우선한다.
올바른 판단: AND가 OR보다 우선하므로 필요한 논리 묶음은 괄호로 표시한다.
BETWEEN의 양끝 포함
잘못된 판단 BETWEEN은 양끝을 모두 제외한다.
올바른 판단: BETWEEN은 시작 값과 종료 값을 모두 포함한다.
월별 날짜 조회
잘못된 판단 11월 30일 자정 이하는 11월 전체다.
올바른 판단: 월 전체의 일시는 다음 달 첫날 미만으로 조회할 수 있다.
LIKE와 와일드카드
잘못된 판단 %는 반드시 한 문자다.
올바른 판단: LIKE의 _는 한 문자에 대응한다.
IN과 조건 집합
잘못된 판단 IN 목록에 같은 값이 두 번 있으면 원본 행이 두 번 나온다.
올바른 판단: IN 목록의 값이 중복되어도 같은 원본 행이 자동으로 복제되지 않는다.
이론을 정리했다면 같은 절의 객관식 문제에서 조건과 예외를 확인하세요. 정답을 고른 뒤에는 틀린 선택지가 왜 성립하지 않는지도 설명해 보세요.
핵심 개념 확인 — 객관식 5문제
설명을 읽은 뒤 아래 다섯 문항을 풀어 보세요. 정답을 고르고 틀린 선택지의 오류도 설명할 수 있으면 이 단원의 기준을 이해한 것입니다.
문제 1
WHERE·날짜 범위·연산자 우선순위에서 AND와 OR에 대한 설명으로 옳은 것은?
- ① OR는 언제나 AND보다 우선한다.
- ② WHERE는 FALSE인 행도 모두 반환한다.
- ③ AND가 OR보다 우선하므로 필요한 논리 묶음은 괄호로 표시한다.
- ④ 괄호는 SQL에서 사용할 수 없다.
정답과 해설 보기
정답 ③
일반적인 우선순위에서 AND는 OR보다 먼저 결합합니다. A OR B AND C는 A OR (B AND C)입니다. 서울 또는 부산이면서 활성 회원을 찾으려면 (지역=서울 OR 지역=부산) AND 활성=1처럼 묶어야 합니다. 괄호는 사람의 의도를 드러내는 수단입니다. 조건이 길면 각 비교 결과를 적고, 괄호·NOT·AND·OR 순서로 평가해 보세요. NULL이 있다면 TRUE/FALSE 외에 UNKNOWN도 함께 고려합니다.
AND가 OR보다 우선하므로 필요한 논리 묶음은 괄호로 표시한다.
문제 2
WHERE·날짜 범위·연산자 우선순위에서 BETWEEN의 양끝 포함에 대한 설명으로 옳은 것은?
- ① BETWEEN은 시작 값과 종료 값을 모두 포함한다.
- ② BETWEEN 20 AND 10은 자동으로 10~20으로 바뀐다.
- ③ 날짜의 시간은 비교에 영향을 주지 않는다.
- ④ BETWEEN은 양끝을 모두 제외한다.
정답과 해설 보기
정답 ①
BETWEEN a AND b는 a 이상 b 이하입니다. 수량 BETWEEN 10 AND 20이면 10과 20을 모두 포함합니다. 두 경계가 거꾸로 주어지면 자동으로 정렬해 주는 것이 일반적인 규칙은 아닙니다. 날짜 컬럼에 시간이 있으면 종료일 자정까지 비교하는 조건은 그날 오후를 놓칩니다. 월별 조회는 시작일 이상·다음 달 시작일 미만의 반열린 구간으로 작성하면 시간 정밀도에 덜 의존합니다.
BETWEEN은 시작 값과 종료 값을 모두 포함한다.
문제 3
WHERE·날짜 범위·연산자 우선순위에서 월별 날짜 조회에 대한 설명으로 옳은 것은?
- ① 일시는 문자열과 항상 같은 정렬 규칙이다.
- ② 월 전체의 일시는 다음 달 첫날 미만으로 조회할 수 있다.
- ③ 11월 30일 자정 이하는 11월 전체다.
- ④ 모든 DBMS의 시간 정밀도는 초 단위다.
정답과 해설 보기
정답 ②
11월 전체를 조회할 때 일시 >= 11월 1일 AND 일시 < 12월 1일로 표현하면 11월 30일의 모든 시간을 포함합니다. 11월 30일 00:00:00을 상한으로 둔 BETWEEN은 그 이후 시간을 놓칩니다. 끝을 23:59:59로 고정하는 방식은 소수 초 정밀도에서 누락이 생길 수 있습니다. 비교할 경계는 컬럼과 호환되는 날짜형 리터럴이나 명시적 변환으로 만들고 문자 정렬에 기대지 않는 편이 명확합니다.
월 전체의 일시는 다음 달 첫날 미만으로 조회할 수 있다.
문제 4
WHERE·날짜 범위·연산자 우선순위에서 LIKE와 와일드카드에 대한 설명으로 옳은 것은?
- ① %는 반드시 한 문자다.
- ② LIKE는 정규표현식과 모든 문법이 같다.
- ③ LIKE의 _는 한 문자에 대응한다.
- ④ _는 항상 숫자만 뜻한다.
정답과 해설 보기
정답 ③
%는 0개 이상 문자, _는 한 문자에 대응합니다. LIKE A%는 A로 시작하는 문자열을 찾고 LIKE A_는 A 뒤에 정확히 한 문자가 오는 값을 찾습니다. 실제 밑줄이나 퍼센트를 검색하려면 ESCAPE 등 제품 문법을 확인합니다. 패턴 비교와 정규표현식은 다른 기능입니다. 대소문자 구별은 문자 비교 설정에 따라 달라질 수 있습니다. 공백도 문자이므로 앞뒤 공백이 남아 있을 때의 결과를 살펴야 합니다.
LIKE의 _는 한 문자에 대응한다.
문제 5
WHERE·날짜 범위·연산자 우선순위에서 IN과 조건 집합에 대한 설명으로 옳은 것은?
- ① IN 목록의 값이 중복되어도 같은 원본 행이 자동으로 복제되지 않는다.
- ② IN에는 서브쿼리를 사용할 수 없다.
- ③ IN은 숫자만 비교한다.
- ④ IN 목록에 같은 값이 두 번 있으면 원본 행이 두 번 나온다.
정답과 해설 보기
정답 ①
IN은 목록 중 일치하는 값이 있는지 검사합니다. 지역 IN (서울,부산)은 두 동등 비교를 OR로 묶은 것과 연결됩니다. 목록에 같은 값이 반복되어도 원본 행이 그 횟수만큼 복제되지는 않습니다. 서브쿼리의 결과를 목록으로 사용할 수도 있습니다. 다만 NOT IN과 NULL의 조합은 3값 논리를 다시 점검해야 합니다. 연산자 이름이 비슷하다고 IN을 조인과 동일한 행 생성 방식으로 이해하면 안 됩니다.
IN 목록의 값이 중복되어도 같은 원본 행이 자동으로 복제되지 않는다.
범위 확인
2026년 학습 범위를 기준으로 구성했습니다. 시험 시행기관의 자격 안내·출제 기준에서 과목과 변경 공지를 확인할 수 있습니다.
다음 · 집계·GROUP BY·HAVING·ORDER BY
SQLD 전체 목차
과목별 이론
- 1과목 · 1장 1~3절 · 데이터 모델·엔터티·속성
- 1과목 · 1장 4~5절 · 관계·식별자와 카디널리티
- 1과목 · 2장 1~3절 · 정규화·조인·트랜잭션 모델
- 1과목 · 2장 4~5절 · NULL·본질식별자·인조식별자
- 2과목 · 1장 1~2절 · 관계형 DB와 SELECT·DISTINCT
- 2과목 · 1장 3절 · 문자·숫자 함수와 CASE
- 2과목 · 1장 4절 · WHERE·날짜 범위·연산자 우선순위
- 2과목 · 1장 5~6절 · 집계·GROUP BY·HAVING·ORDER BY
- 2과목 · 1장 7~8절 · INNER·OUTER·표준 조인
- 2과목 · 2장 1절 · 서브쿼리·EXISTS·스칼라 서브쿼리
- 2과목 · 2장 2~3절 · 집합 연산·ROLLUP·CUBE·GROUPING
- 2과목 · 2장 4~5절 · 윈도우 함수·순위·Top N
- 2과목 · 2장 6~8절 · 계층형 질의·셀프 조인·PIVOT·정규표현식
- 2과목 · 3장 1~2절 · DML·TCL과 트랜잭션
- 2과목 · 3장 3~4절 · DDL·DCL·제약조건·권한
단원별 객관식
- 1과목 · 1장 1~3절 · 데이터 모델·엔터티·속성
- 1과목 · 1장 4~5절 · 관계·식별자와 카디널리티
- 1과목 · 2장 1~3절 · 정규화·조인·트랜잭션 모델
- 1과목 · 2장 4~5절 · NULL·본질식별자·인조식별자
- 2과목 · 1장 1~2절 · 관계형 DB와 SELECT·DISTINCT
- 2과목 · 1장 3절 · 문자·숫자 함수와 CASE
- 2과목 · 1장 4절 · WHERE·날짜 범위·연산자 우선순위
- 2과목 · 1장 5~6절 · 집계·GROUP BY·HAVING·ORDER BY
- 2과목 · 1장 7~8절 · INNER·OUTER·표준 조인
- 2과목 · 2장 1절 · 서브쿼리·EXISTS·스칼라 서브쿼리
- 2과목 · 2장 2~3절 · 집합 연산·ROLLUP·CUBE·GROUPING
- 2과목 · 2장 4~5절 · 윈도우 함수·순위·Top N
- 2과목 · 2장 6~8절 · 계층형 질의·셀프 조인·PIVOT·정규표현식
- 2과목 · 3장 1~2절 · DML·TCL과 트랜잭션
- 2과목 · 3장 3~4절 · DDL·DCL·제약조건·권한
실습
- SQL 학습 실습 1 · 6작업 · SELECT·조건·정렬
- SQL 학습 실습 2 · 6작업 · NULL·COUNT·평균
- SQL 학습 실습 3 · 6작업 · 날짜 범위·문자 조건
- SQL 학습 실습 4 · 6작업 · GROUP BY·HAVING·조건부 합계
- SQL 학습 실습 5 · 6작업 · 조인·행 수·미주문 고객
- SQL 학습 실습 6 · 6작업 · 서브쿼리·EXISTS·NOT EXISTS
- SQL 학습 실습 7 · 6작업 · 순위·동률·고객별 Top N
- SQL 학습 실습 8 · 6작업 · 집합 연산·조건부 피벗·전체 검산