Предикат SQL BETWEEN - поиск значений из указанного интервала
Назад<<< | Содержание | Вперёд>>> |
С помощью предиката SQL BETWEEN можно извлечь из таблицы строки, в которых значения некоторого проверяемого столбца находятся в интервале, границы которого обозначены некоторым выражением. Границы интервала также включены в него.
Запросы с предикатом SQL BETWEEN имеют следующий синтаксис:
Если перед предикатом BETWEEN поставить ключевое слово NOT, то в выборку попадут строки, в которых значение проверяемого столбца находится за пределами интервала: до ВЫРАЖЕНИЯ_1 и после ВЫРАЖЕНИЯ_2.
Если вы хотите выполнить запросы к базе данных из этого урока на MS SQL Server, но эта СУБД не установлена на вашем компьютере, то ее можно установить, пользуясь инструкцией по этой ссылке.
В первых примерах работаем с базой данных "Компания 2", содержащей данные о заработной плате сотрудников. Скрипт для создания этой базы данных, её таблиц и заполения таблиц данными - в файле по этой ссылке.
Запросы с BETWEEN: интервал задан указанными числами
В самых простых запросах с предикатом BETWEEN границы интервала для проверяемого столбца заданы непосредственным указанием числовых значений.
Пример 1. Итак, работаем с базой данных фирмы и её таблицей Staff, содержащей данные о заработной плате сотрудников.
ID | Name | Salary |
1 | Sanders | 18357.5 |
2 | Pernal | 15430.0 |
3 | Marenghi | 17506.8 |
4 | Doctor | 12322.4 |
5 | Factor | 16228.7 |
6 | Junkers | 16232.8 |
7 | Moonlight | 21500.6 |
8 | Aisen | 19540.7 |
9 | MacGregor | 15790.8 |
Требуется вывести сотрудников, заработная плата которых находится в интервале от 16 000 до 18 000. Пишем следующий запрос с предикатом BETWEEN:
Запрос выведет следующую результирующую таблицу:
ID | Name | Salary |
3 | Marenghi | 17506.8 |
5 | Factor | 16228.7 |
6 | Junkers | 16232.8 |
Пример 2. База данных и таблица - те же, что в примере 1. Требуется вывести сотрудников, заработная плата которых находится вне интервала от 16 000 до 18 000. Пишем следующий запрос с предикатом BETWEEN, перед которым ставим ключевое слово NOT:
Запрос выведет следующую результирующую таблицу:
ID | Name | Salary |
1 | Sanders | 18357.5 |
2 | Pernal | 15430.0 |
4 | Doctor | 12322.4 |
7 | Moonlight | 21500.6 |
8 | Aisen | 19540.7 |
9 | MacGregor | 15790.8 |
Запросы с BETWEEN: интервал задан вложенными запросами
В запросах с BETWEEN границы интервала для проверяемого столбца можно не указывать явно, задав его некоторыми условиями, которые определены вложенными запросами.
Пример 3. Продолжаем работать с базой данных Staff. Требуется вывести сотрудников, заработная плата которых находится в интервале между средней и максимальной. Пишем следующий запрос, в котором границы заданы вложенными запросами:
Результатом выполнения запроса будет следующая таблица:
ID | Name | Salary |
1 | Sanders | 18357.5 |
3 | Marenghi | 17506.8 |
7 | Moonlight | 21500.6 |
8 | Aisen | 19540.7 |
Пример 4. База данных и таблица - те же. Требуется вывести сотрудников, заработная плата которых находится в интервале между заработной платой сотрудника MacGregor и заработной платой сотрудика Marenghi. Пишем следующий запрос, в котором границы заданы вложенными запросами:
Результатом выполнения запроса будет следующая таблица:
ID | Name | Salary |
3 | Marenghi | 17506.8 |
5 | Factor | 16228.7 |
6 | Junkers | 16232.8 |
9 | MacGregor | 15790.8 |
Как видим, граничные значения интервала попали в результирующую таблицу.
Написать запрос с предикатом BETWEEN самостоятельно, а затем посмотреть решение
Пример 5. Продолжаем работать с таблицей Staff. Требуется вывести сотрудников с ID между ID сотрудника Marenghi и ID сотрудника Moonlight.
Запросы с BETWEEN: интервал задан значениями даты и времени
Интервал для извлечения строк с помощью предиката BETWEEN может быть задан не только значениями числового типа данных, но и значениями даты и времени.
Далее работаем с базой данных "Недвижимость". Скрипт для создания этой базы данных, её таблиц и заполения таблиц данными - в файле по этой ссылке.
Пример 6. Итак, работаем с базой данных "Недвижимость".

Таблица Deal содержит данные о сделках. Нам потребуется столбец Date, в котором указывается дата совершения сделки. Для упрощения будем считать, что в таблице представлены сделки, заключённые в течение одного года. Требуется вывести сделки, заключённые в августе и сентябре. Пишем следующий запрос:
Примеры запросов к базе данных "Недвижимость" есть также в уроках по оператору GROUP BY, предикату EXISTS, функциям ALL и ANY и LIMIT.
Поделиться с друзьями
Назад<<< | Содержание | Вперёд>>> |