Базы данных
и язык SQL

Предикат SQL BETWEEN - поиск значений из указанного интервала

С помощью предиката SQL BETWEEN можно извлечь из таблицы строки, в которых значения некоторого проверяемого столбца находятся в интервале, границы которого обозначены некоторым выражением. Границы интервала также включены в него.

Запросы с предикатом SQL BETWEEN имеют следующий синтаксис:

SELECT ИМЕНА_СТОЛБЦОВ FROM ИМЯ ТАБЛИЦЫ WHERE ИМЯ_СТОЛБЦА BETWEEN ВЫРАЖЕНИЕ_1 AND ВЫРАЖЕНИЕ_2

Если перед предикатом BETWEEN поставить ключевое слово NOT, то в выборку попадут строки, в которых значение проверяемого столбца находится за пределами интервала: до ВЫРАЖЕНИЯ_1 и после ВЫРАЖЕНИЯ_2.

Запросы с BETWEEN: интервал задан указанными числами

В самых простых запросах с предикатом BETWEEN границы интервала для проверяемого столбца заданы непосредственным указанием числовых значений.

Пример 1. Работаем с базой данных фирмы и её таблицей Staff, содержащей данные о заработной плате сотрудников.

IDNameSalary
1Sanders18357.5
2Pernal15430.0
3Marenghi17506.8
4Doctor12322.4
5Factor16228.7
6Junkers16232.8
7Moonlight21500.6
8Aisen19540.7
9MacGregor15790.8

Требуется вывести сотрудников, заработная плата которых находится в интервале от 16 000 до 18 000. Пишем следующий запрос с предикатом BETWEEN:

SELECT * FROM Staff WHERE Salary BETWEEN 16000 AND 18000

Запрос выведет следующую результирующую таблицу:

IDNameSalary
3Marenghi17506.8
5Factor16228.7
6Junkers16232.8

Пример 2. База данных и таблица - те же, что в примере 1. Требуется вывести сотрудников, заработная плата которых находится вне интервала от 16 000 до 18 000. Пишем следующий запрос с предикатом BETWEEN, перед которым ставим ключевое слово NOT:

SELECT * FROM Staff WHERE Salary NOT BETWEEN 16000 AND 18000

Запрос выведет следующую результирующую таблицу:

IDNameSalary
1Sanders18357.5
2Pernal15430.0
4Doctor12322.4
7Moonlight21500.6
8Aisen19540.7
9MacGregor15790.8

Запросы с BETWEEN: интервал задан вложенными запросами

В запросах с BETWEEN границы интервала для проверяемого столбца можно не указывать явно, задав его некоторыми условиями, которые определены вложенными запросами.

Пример 3. Продолжаем работать с базой данных Staff. Требуется вывести сотрудников, заработная плата которых находится в интервале между средней и максимальной. Пишем следующий запрос, в котором границы заданы вложенными запросами:

SELECT * FROM Staff WHERE Salary BETWEEN (SELECT AVG(Salary) FROM Staff) AND (SELECT MAX(Salary) FROM Staff)

Результатом выполнения запроса будет следующая таблица:

IDNameSalary
1Sanders18357.5
3Marenghi17506.8
7Moonlight21500.6
8Aisen19540.7

Пример 4. База данных и таблица - те же. Требуется вывести сотрудников, заработная плата которых находится в интервале между заработной платой сотрудника MacGregor и заработной платой сотрудика Marenghi. Пишем следующий запрос, в котором границы заданы вложенными запросами:

SELECT * FROM Staff WHERE Salary BETWEEN (SELECT Salary FROM Staff WHERE Name='MacGregor') AND (SELECT Salary FROM Staff WHERE Name='Marenghi')

Результатом выполнения запроса будет следующая таблица:

IDNameSalary
3Marenghi17506.8
5Factor16228.7
6Junkers16232.8
9MacGregor15790.8

Как видим, граничные значения интервала попали в результирующую таблицу.

Написать запрос с предикатом BETWEEN самостоятельно, а затем посмотреть решение

Пример 5. Продолжаем работать с таблицей Staff. Требуется вывести сотрудников с ID между ID сотрудника Marenghi и ID сотрудника Moonlight.

Правильное решение и ответ.

Запросы с BETWEEN: интервал задан значениями даты и времени

Интервал для извлечения строк с помощью предиката BETWEEN может быть задан не только значениями числового типа данных, но и значениями даты и времени.

Пример 6. Работаем с базой данных "Недвижимость".

Таблица Deal содержит данные о сделках. Нам потребуется столбец Date, в котором указывается дата совершения сделки. Для упрощения будем считать, что в таблице представлены сделки, заключённые в течение одного года. Требуется вывести сделки, заключённые в августе и сентябре. Пишем следующий запрос:

SELECT * FROM Deal WHERE MONTH(Date) BETWEEN 08 AND 09

Поделиться с друзьями

Реляционные базы данных и язык SQL