SQLLab
Теория· 7 мин· 10 XP

BETWEEN — диапазоны чисел и дат

Зачем это нужно

Часто нужно найти строки в диапазоне: товары от 500 до 2000 ₽, поступления в январе 2024, остатки от 5 до 20 штук. Можно написать WHERE price >= 500 AND price <= 2000, но BETWEEN делает то же самое короче и читабельнее.

Аналогия с Excel

В Excel «Числовые фильтры» → «Между». Вводите минимум и максимум — Excel показывает строки в этом диапазоне. BETWEEN — это то же самое в SQL.

Синтаксис

sql
WHERE колонка BETWEEN нижняя_граница AND верхняя_граница

Важно: обе границы включаются в результат (>= и <=).

Разбор примеров

sql
-- Товары от 500 до 2000 ₽ включительно
SELECT name, price
FROM products
WHERE price BETWEEN 500 AND 2000
ORDER BY price ASC, name;

-- То же самое через >= и <=
SELECT name, price
FROM products
WHERE price >= 500 AND price <= 2000
ORDER BY price ASC, name;

Оба запроса дадут одинаковый результат. BETWEEN — просто удобная запись.

BETWEEN с датами

sql
-- Товары, поступившие в январе 2024
SELECT name, created_at
FROM products
WHERE created_at BETWEEN '2024-01-01' AND '2024-01-31'
ORDER BY created_at, name;

Формат дат: 'YYYY-MM-DD'. Обе даты включаются.

NOT BETWEEN

sql
-- Товары вне диапазона 1000–10000 ₽ (дешевле 1000 или дороже 10000)
SELECT name, price
FROM products
WHERE price NOT BETWEEN 1000 AND 10000
ORDER BY price ASC;

Частые ошибки

Думают, что границы не включаются — BETWEEN 500 AND 2000 включает и 500, и 2000. Если нужно исключить границы — используйте > 500 AND < 2000.

Перепутали порядок границ — BETWEEN 2000 AND 500 вернёт пустой результат. Нижняя граница всегда первая, верхняя — вторая.

Используют BETWEEN для текста — технически работает (алфавитный диапазон), но это редко то, что нужно. Для текста лучше IN или LIKE.

Запомни

BETWEEN a AND b — то же что >= a AND <= b. Обе границы включаются. Нижняя граница всегда первой.


Мини-практика

Запиши условие через BETWEEN:

  1. Цена от 1000 до 3000 ₽
  2. Дата поступления в марте 2024
  3. Остаток вне диапазона 10–50 штук
Ответы
  1. price BETWEEN 1000 AND 3000
  2. created_at BETWEEN '2024-03-01' AND '2024-03-31'
  3. stock NOT BETWEEN 10 AND 50

Прочитайте урок до конца — прогресс засчитается автоматически