Ранее в курсе мы уже научились работать с запросами, в которых данные фильтруются по диапазону значений. Например, мы умеем фильтровать записи по диапазону дат создания пользователя:
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 | |
16 | Abe | Funk | |
17 | Edyth | Wiegand | Filomena.Hodkiewicz@yahoo.com |
18 | Flavie | Marquardt | Rashawn.Altenwerth@gmail.com |
19 | Jorge | Homenick | |
20 | Sim | Orn | |
21 | Nicolas | Kreiger | Audrey.Gibson@yahoo.com |
22 | Princess | Schmitt | Daniella.Pfeffer46@yahoo.com |
23 | Dangelo | Jacobi |
View on DB Fiddle
Выводы
В этом уроке мы изучили оператор BETWEEN
, который позволяет отфильтровать данные по диапазону. Это намного удобнее, чем использовать два условия «больше или равно» и «меньше или равно», это улучшает читаемость и понимание запроса.
Нужно помнить, что BETWEEN
включает в условие крайние значения из указанного диапазона.