Ранее в курсе мы уже научились работать с запросами, в которых данные фильтруются по диапазону значений. Например, мы умеем фильтровать записи по диапазону дат создания пользователя:
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
включает в условие крайние значения из указанного диапазона.
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.