BETWEEN SQL: как выбрать значения в диапазоне

Короткий ответ: BETWEEN в SQL используется для выбора значений в диапазоне. Он работает в WHERE и проверяет, попадает ли значение между нижней и верхней границей. Важная деталь: BETWEEN включает обе границы диапазона

Например, если написать price BETWEEN 100 AND 500, в результат попадут строки с ценой 100, 500 и всеми значениями между ними. Это удобно для чисел, дат и иногда строк

Базовый пример

Создадим таблицу заказов

CREATE TABLE orders (
    id INTEGER,
    customer_name VARCHAR(100),
    amount DECIMAL(10, 2),
    created_at DATE
);

INSERT INTO orders (id, customer_name, amount, created_at) VALUES
(1, 'Анна', 900.00, '2026-01-10'),
(2, 'Игорь', 1500.00, '2026-01-11'),
(3, 'Мария', 2500.00, '2026-01-12'),
(4, 'Олег', 5000.00, '2026-01-20');

Выберем заказы от 1000 до 3000

SELECT id, customer_name, amount
FROM orders
WHERE amount BETWEEN 1000 AND 3000;

В результат попадут заказы Игоря и Марии. Заказ на 900 не попадет, потому что он ниже нижней границы. Заказ на 5000 не попадет, потому что выше верхней

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

Это частая точка путаницы. Запрос

WHERE amount BETWEEN 1500 AND 2500

равен по смыслу

WHERE amount >= 1500 AND amount <= 2500

То есть значения 1500 и 2500 входят в выборку. Если вам нужны только значения строго внутри диапазона, пишите обычные сравнения

WHERE amount > 1500 AND amount < 2500

BETWEEN для дат

Диапазон дат пишется так

SELECT id, customer_name, created_at
FROM orders
WHERE created_at BETWEEN '2026-01-10' AND '2026-01-15';

Если столбец имеет тип DATE, такой запрос обычно понятен. Если столбец имеет тип DATETIME или TIMESTAMP, будьте внимательны: дата с временем может не попасть в диапазон, если верхняя граница указана как начало дня

Например, значение 2026-01-15 18:30:00 может не попасть в диапазон до '2026-01-15', если СУБД трактует это как 2026-01-15 00:00:00. Для дат со временем часто безопаснее писать так

WHERE created_at >= '2026-01-10'
  AND created_at < '2026-01-16';

Так вы берете весь день 15 января и не спорите с временем

NOT BETWEEN

Если нужно выбрать все значения вне диапазона, используйте NOT BETWEEN

SELECT id, customer_name, amount
FROM orders
WHERE amount NOT BETWEEN 1000 AND 3000;

В результат попадут заказы меньше 1000 и больше 3000

BETWEEN для строк

BETWEEN может работать и со строками, но новичкам лучше использовать это осторожно. Строки сравниваются по правилам сортировки и collation, поэтому результат может отличаться от человеческого ожидания

Для учебных задач BETWEEN лучше сначала тренировать на числах и датах. Со строками чаще используют LIKE, IN, равенство или полнотекстовый поиск

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

Создайте таблицу orders, добавьте несколько заказов и напишите три запроса: заказы от 1000 до 3000, заказы за первые 15 дней января и заказы вне диапазона от 1000 до 3000

После этого перепишите первый запрос без BETWEEN, через >= и <=. Результат должен совпасть. Это закрепит понимание границ

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

Первая ошибка — думать, что BETWEEN не включает границы. Он включает и нижнюю, и верхнюю границу

Вторая ошибка — путать порядок границ. Пишите сначала меньшее значение, потом большее: BETWEEN 100 AND 500, а не наоборот

Третья ошибка — использовать BETWEEN для дат со временем без учета часов и минут. Для TIMESTAMP часто лучше верхнюю границу делать через следующий день и оператор <

Четвертая ошибка — применять BETWEEN к строкам и ожидать простой алфавитный результат. Сравнение строк зависит от настроек базы

Что почитать дальше по SQL

Если нужен общий маршрут по теме, откройте рубрику SQL. Для соседних задач пригодятся эти разборы:

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x