0Pricing
SQL Academy · Урок

BETWEEN для диапазонов

Используйте BETWEEN для включающих числовых диапазонов и диапазонов дат, а для полуоткрытых интервалов выбирайте явные сравнения >= и <

«BETWEEN для диапазонов» — бесплатный урок SQL Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.

BETWEEN включает границы

BETWEEN a AND b сопоставляет значения, для которых выполняется x >= a AND x <= b. Обе конечные точки включаются в диапазон.

SELECT * FROM orders WHERE total BETWEEN 100 AND 500;
-- equivalent to:
SELECT * FROM orders WHERE total >= 100 AND total <= 500;

Диапазоны дат

BETWEEN также работает с датами и временными метками:

SELECT * FROM orders
WHERE created_at BETWEEN '2024-01-01' AND '2024-12-31';

Ловушка включённых границ

При использовании столбца TIMESTAMP значение BETWEEN '2024-12-31' заканчивается в полночь 31 декабря, а НЕ в конце этого дня. Заказы, размещённые 31 декабря в 14:00, исключаются.

-- WRONG — misses orders later on Dec 31:
WHERE created_at BETWEEN '2024-12-01' AND '2024-12-31';

-- RIGHT — half-open interval:
WHERE created_at >= '2024-12-01'
  AND created_at <  '2025-01-01';

Для времени предпочитайте полуоткрытые интервалы

Шаблон полуоткрытого интервала >= start AND < next_period однозначен, работает при любой точности и естественно соединяется с соседними периодами.

WHERE created_at >= date_trunc('month', NOW())
  AND created_at <  date_trunc('month', NOW()) + INTERVAL '1 month';

NOT BETWEEN

Обратная операция к BETWEEN — исключает диапазон:

SELECT * FROM products WHERE price NOT BETWEEN 10 AND 20;
-- equivalent to: price < 10 OR price > 20

Запросы по диапазону и индексы

Индекс B-tree помогает выполнять запросы по диапазону. В составных индексах для наилучшей избирательности столбец с диапазоном следует размещать последним:

CREATE INDEX orders_user_total_idx ON orders (user_id, total);

-- Efficient: equality on user_id, range on total
SELECT * FROM orders
WHERE user_id = 42 AND total BETWEEN 100 AND 500;

Строки и BETWEEN

BETWEEN сравнивает строки лексикографически. Учитывайте регистр:

SELECT * FROM users WHERE last_name BETWEEN 'A' AND 'C';
-- Includes 'Adams' and 'Bond', excludes 'C' itself only if 'C' < 'Ca...'

Типы диапазонов (PostgreSQL)

В PostgreSQL есть специальные типы диапазонов для полуоткрытых интервалов:

SELECT int4range(10, 20) @> 15;       -- true  (15 in [10,20))
SELECT tsrange('2024-01-01', '2025-01-01') @> NOW()::TIMESTAMP;

Проверка диапазонов с помощью CHECK

Убедитесь, что start <= end в момент вставки:

CREATE TABLE bookings (
  id BIGSERIAL PRIMARY KEY,
  start_at TIMESTAMPTZ NOT NULL,
  end_at   TIMESTAMPTZ NOT NULL,
  CHECK (start_at < end_at)
);

Разбиение чисел на диапазоны

Объедините BETWEEN с CASE, чтобы создать диапазоны:

SELECT id, total,
  CASE
    WHEN total BETWEEN 0 AND 99    THEN 'small'
    WHEN total BETWEEN 100 AND 999 THEN 'medium'
    ELSE 'large'
  END AS bucket
FROM orders;

BETWEEN SYMMETRIC

Расширение стандарта SQL, которому не важно, какая сторона меньше:

SELECT 5 BETWEEN SYMMETRIC 10 AND 1;   -- TRUE

Итоги

BETWEEN — удобная сокращённая запись диапазона с включёнными границами.

  • Помните о границах временных меток — предпочитайте полуоткрытый интервал >= start AND < end
  • Составные индексы ускоряют запросы по диапазону
  • Ограничения CHECK обеспечивают корректность диапазонов

Быстрая проверка

Включаются ли обе конечные точки BETWEEN a AND b в стандартном SQL?

Часто задаваемые вопросы

Урок «BETWEEN для диапазонов» бесплатный?

Да — полный текст урока «BETWEEN для диапазонов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.

Чему я научусь в уроке «BETWEEN для диапазонов»?

Используйте BETWEEN для включающих числовых диапазонов и диапазонов дат, а для полуоткрытых интервалов выбирайте явные сравнения >= и < Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать SQL Academy?

Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «BETWEEN для диапазонов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке SQL Academy?

Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Шаблоны LIKE и подстановочные символы
  2. IN и NOT IN для множеств
  3. BETWEEN для диапазонов
  4. IS NULL, IS NOT NULL и COALESCE
← Назад к SQL Academy