Оператор BETWEEN: фильтрация по диапазону значений
🔍 Что делает оператор BETWEEN?
Когда нужно выбрать данные в определённом диапазоне, оператор BETWEEN становится вашим лучшим другом! Это как волшебная указка, которая говорит SQL:
«Дай мне все записи, где значение попадает между точкой A и точкой B».
👉 Как это работает технически?
BETWEEN проверяет, входит ли значение в диапазон включительно (границы A и B тоже учитываются). Под капотом он преобразуется в два условия с >= и <=.
-- Эквивалентные записи:
WHERE price BETWEEN 100 AND 500
WHERE price >= 100 AND price <= 500
📊 Где применяется?
1. Числовые диапазоны
Идеален для фильтрации: - Цен товаров - Возраста пользователей - Количества товаров на складе
Пример:
SELECT product_name, price
FROM products
WHERE price BETWEEN 50 AND 200; -- Товары ценой от 50 до 200 (включая границы)
2. Даты и время
Чаще всего используется для выборки за период:
SELECT order_id, order_date
FROM orders
WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31'; -- Все заказы за 2023 год
3. Текстовые диапазоны
Работает и с алфавитным порядком!
SELECT employee_name
FROM employees
WHERE last_name BETWEEN 'A' AND 'D'; -- Фамилии на A, B, C, D (включая 'D')
🚨 Опасные ловушки
❗Границы включаются!
-- Выберет записи с rating = 3, 4, 5
WHERE rating BETWEEN 3 AND 5
❗Порядок границ важен
-- Не сработает (вернёт 0 строк)!
WHERE price BETWEEN 500 AND 100 -- Левая граница должна быть меньше правой
❗Типы данных должны совпадать
-- Ошибка, если 'price' — текст:
WHERE price BETWEEN '100' AND '500' -- Для чисел кавычки не нужны!
💡 Продвинутые фишки
NOT BETWEEN
Выбор значений вне диапазона:
SELECT product_name
FROM products
WHERE price NOT BETWEEN 10 AND 20; -- Товары дешевле 10 или дороже 20
Комбинация с другими операторами
SELECT *
FROM books
WHERE (rating BETWEEN 4 AND 5)
AND publication_year > 2020; -- Только свежие книги с высоким рейтингом
Динамические диапазоны
Используйте переменные или подзапросы:
-- Выбор товаров в ценовом диапазоне определённой категории
SELECT *
FROM products
WHERE price BETWEEN
(SELECT MIN(price) FROM products WHERE category = 'Electronics')
AND
(SELECT MAX(price) FROM products WHERE category = 'Electronics');
🏆 Практика: решаем реальные задачи
Задача 1: Найдите всех клиентов, которые сделали заказ с 1 по 7 января 2024 года.
SELECT DISTINCT customer_id
FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-01-07';
Задача 2: Получите список товаров с остатком на складе от 5 до 15 штук, кроме категории «Сезонные».
SELECT product_name, stock_quantity
FROM products
WHERE stock_quantity BETWEEN 5 AND 15
AND category != 'Сезонные';
⚡ Как запомнить?
- BETWEEN — это «от и до включительно»
- Всегда проверяйте порядок границ:
между меньшим AND большим - Для дат используйте стандартный формат
YYYY-MM-DD
👉 Простое правило: Если можете сказать «от A до B» в жизни — смело применяйте BETWEEN в SQL!
🔥 Вызов для самых смелых
Попробуйте написать запрос, который найдёт сотрудников:
- С зарплатой от $3000 до $5000
- ИЛИ с датой приёма между 2020 и 2023 годом
Ответ:
SELECT employee_name
FROM employees
WHERE salary BETWEEN 3000 AND 5000
OR hire_date BETWEEN '2020-01-01' AND '2023-12-31';