Короткий ответ: 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. Для соседних задач пригодятся эти разборы:
- SQL-курсы: как выбрать обучение и не потерять время
- Как выбрать 10 строк в SQL: TOP, LIMIT и FETCH
- Как проверить тип данных в SQL: столбцы, значения и системные таблицы
- ALTER TABLE в SQL: как добавить, изменить и удалить столбец



