메인 콘텐츠로 건너뛰기

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를 뜻합니다. 범위는 양쪽 경계를 포함하고, 낮은 경계를 먼저 씁니다.

예제

  1. 숫자 범위

정확히 60분인 영화가 결과에 들어 있으며, 이것은 낮은 경계가 일치로 간주된다는 것을 보여 줍니다.

  1. 같은 것을 풀어 쓴 형태

동일한 행입니다. BETWEEN은 열 이름을 두 번 쓰는 수고를 덜어 줄 뿐, 그 밖에는 아무것도 하지 않습니다.

  1. 범위 밖

NOT BETWEEN은 낮은 경계 아래와 높은 경계 위의 행을 유지합니다. 46분은 카탈로그에서 가장 짧은 영화입니다.

낮은 경계가 먼저 와야 합니다

BETWEEN은 경계를 대신 정렬해 주지 않습니다. 높은 값을 먼저 주면, 70 이상이면서 동시에 60 이하인 숫자를 요구하는 것이 되는데, 그런 숫자는 없습니다.
오류도 경고도 없습니다. 일치할 것으로 예상한 범위에서 빈 결과가 나오면, 경계가 뒤바뀌지 않았는지 먼저 확인할 만합니다.

날짜에 대한 BETWEEN은 자정에서 멈춥니다

이것이 사람들의 시간을 정말로 잡아먹는 경우이고, 열의 타입에서 시작합니다.
payment_date는 datetime이므로, 모든 값이 시각을 담고 있습니다. 시각 없이 쓴 날짜는 그날이 시작되는 자정을 뜻합니다.
이것은 “25일과 26일”로 읽히고 137개의 행을 반환합니다. 같은 2일을 반열린 범위로 요청하면 311개를 반환합니다.
높은 경계 '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를 사용하세요.

함께 보기