Ранее в курсе мы уже научились работать с запросами, в которых данные фильтруются по диапазону значений. Например, мы умеем фильтровать записи по диапазону дат создания пользователя:
SELECT
id,
first_name,
last_name,
email
FROM users
WHERE created_at > '2022-01-01' AND created_at < '2023-02-01';
View on DB Fiddle
Но есть одна сложность — такое условие неудобно читать и писать. Нам приходится дважды указывать одно и то же имя поля, поэтому есть вероятность допустить опечатку или ошибиться в операторах «больше» и «меньше». Для этой задачи можно использовать более удобный оператор — BETWEEN. В этом уроке мы изучим, как он работает.
Как фильтровать данные по диапазону
По сути, оператор BETWEEN — это сокращенная версия двух условий, соединенных через AND. Напишем запрос, который выбирает пользователей с датой рождения от 1 января до 1 февраля 2022 года:
SELECT *
FROM users
WHERE birthday > '2022-01-01' AND birthday < '2022-02-01';
View on DB Fiddle
Теперь запишем диапазон дат через BETWEEN:
SELECT *
FROM users
WHERE birthday BETWEEN '2022-01-01' AND '2022-02-01';
View on DB Fiddle
Во втором запросе мы использовали BETWEEN. Обратите внимание, чем отличаются два этих запроса:
- В первом запросе крайние значения не входят в диапазон
- Во втором запросе — входят
Другими словами, эти два запроса не равнозначны. В первый диапазон не попадут пользователи с датой рождения 2022-01-01 или 2022-02-01.
А теперь попробуем написать запрос, равнозначный запросу с BETWEEN. Для этого используем операторы сравнения:
>=вместо><=вместо<
SELECT *
FROM users
WHERE birthday >= '2022-01-01' AND birthday <= '2022-02-01';
View on DB Fiddle
Такой запрос будет полностью равнозначен запросу с BETWEEN.
Представим, что нам нужно выбрать все записи, которые НЕ попадают в диапазон. Тогда мы добавляем оператор NOT:
SELECT *
FROM users
WHERE birthday NOT BETWEEN '2022-01-01' AND '2022-02-01';
View on DB Fiddle
Такой запрос выведет всех пользователей, чьи даты рождения попадают в заданный диапазон — строго меньше 1 января или строго больше 1 февраля 2022 года.
Обычно оператор BETWEEN используют для дат, но его можно применять и с числами:
SELECT
id,
first_name,
last_name,
email
FROM users
WHERE id BETWEEN 15 AND 23;
| id | first_name | last_name | |
|---|---|---|---|
| 15 | Esteban | Von | Anika_OReilly58@gmail.com |
| 16 | Abe | Funk | Dewayne_Lueilwitz69@hotmail.com> |
| 17 | Edyth | Wiegand | Filomena.Hodkiewicz@yahoo.com> |
| 18 | Flavie | Marquardt | Rashawn.Altenwerth@gmail.com> |
| 19 | Jorge | Homenick | Dallin_Lebsack88@hotmail.com> |
| 20 | Sim | Orn | Marvin_Hettinger24@yahoo.com> |
| 21 | Nicolas | Kreiger | Audrey.Gibson@yahoo.com |
| 22 | Princess | Schmitt | Daniella.Pfeffer46@yahoo.com> |
| 23 | Dangelo | Jacobi | Melany_Pfeffer87@hotmail.com> |
View on DB Fiddle
Выводы
В этом уроке мы изучили оператор BETWEEN, который позволяет отфильтровать данные по диапазону. Это намного удобнее, чем использовать два условия «больше или равно» и «меньше или равно», это улучшает читаемость и понимание запроса.
Нужно помнить, что BETWEEN включает в условие крайние значения из указанного диапазона.