Зарегистрируйтесь, чтобы продолжить обучение

Фильтрация данных по диапазону SQL

Ранее в курсе мы уже научились работать с запросами, в которых данные фильтруются по диапазону значений. Например, мы умеем фильтровать записи по диапазону дат создания пользователя:

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 email
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 включает в условие крайние значения из указанного диапазона.

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff