VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
BETWEEN은 값이 범위 안에 들어가는지 검사합니다. 비교 2개를 줄여 쓴 것이고, 날짜에서 사람들이 가장 자주 미묘하게 틀리는 절입니다.
시작하기 전에 mysql -u root -p sakila로 클라이언트를 여세요.
BETWEEN의 동작 방식
LOW_BOUND와 HIGH_BOUND를 범위의 양 끝으로 바꾸세요.
x BETWEEN a AND b는 x >= a AND x <= b를 뜻합니다. 범위는 양쪽 경계를 포함하고, 낮은 경계를 먼저 씁니다.
예제
- 숫자 범위
- 같은 것을 풀어 쓴 형태
BETWEEN은 열 이름을 두 번 쓰는 수고를 덜어 줄 뿐, 그 밖에는 아무것도 하지 않습니다.
- 범위 밖
NOT BETWEEN은 낮은 경계 아래와 높은 경계 위의 행을 유지합니다. 46분은 카탈로그에서 가장 짧은 영화입니다.
낮은 경계가 먼저 와야 합니다
BETWEEN은 경계를 대신 정렬해 주지 않습니다. 높은 값을 먼저 주면, 70 이상이면서 동시에 60 이하인 숫자를 요구하는 것이 되는데, 그런 숫자는 없습니다.
날짜에 대한 BETWEEN은 자정에서 멈춥니다
이것이 사람들의 시간을 정말로 잡아먹는 경우이고, 열의 타입에서 시작합니다.payment_date는 datetime이므로, 모든 값이 시각을 담고 있습니다. 시각 없이 쓴 날짜는 그날이 시작되는 자정을 뜻합니다.
'2005-05-26'은 2005-05-26 00:00:00이 되었습니다. 26일 동안 받은 모든 결제는 그 순간보다 늦으므로, BETWEEN은 그것들을 모두 제외했습니다. 137개의 행은 25일 하루만의 것이고, 자정 정각에 떨어지는 결제가 있었다면 그것도 포함했을 것입니다.
날짜 범위는 >= 시작 AND < 끝의 다음 날로 쓰세요. 이 형태는 열이 시각을 담고 있는지 생각할 필요가 없고, 나중에 열이 시각을 갖게 되어도 계속 올바릅니다.
요약
- 범위에는
BETWEEN을 사용하고, 양쪽 경계를 포함한다고 예상하세요. - 뒤바뀐 범위는 아무것과도 일치하지 않으면서 아무 말도 하지 않으므로, 낮은 경계를 먼저 쓰세요.
x BETWEEN a AND b를x >= a AND x <= b로 읽으세요.- 날짜에는
BETWEEN대신>= start AND < day_after_end를 사용하세요.
함께 보기
- WHERE — BETWEEN이 들어가는 절
- 연산자 — BETWEEN이 줄여 쓴 비교들
- IN — 범위가 아니라 값 목록 검사하기
- MySQL의 날짜와 시간 함수 — 범위의 경계 만들기