Содержание
При работе с реляционными СУБД, в которых данные хранятся в табличном виде, пользователи часто сталкиваются с задачей выборки значений, входящих (не входящих) в определенный диапазон. Язык SQL позволяет задать множество, которому должно (не должно) принадлежать значение различными вариантами – оператором In, оператором Like, комбинацией условий больше – меньше, а также оператором SQL Between. Описание и примеры в данной статье будут посвящены последнему варианту.
Оператор «Между» в SQL: синтаксис, ограничения
Дословно оператор between SQL так и переводится – «между». Его использование позволяет задать ограничение «От и До» к конкретному полю, и если очередное значение попадет в диапазон, то предикат примет значение «Истина», и значение попадет в итоговую выборку.
Синтаксис у оператора предельно простой:
Where t1.n between 0 and 7
Как видим, после ключевого слова between необходимо указать значение нижней границы диапазона, затем AND и значение верхней границы.
Перечислим, с какими типами данных может работать оператор between SQL:
- С числами – целыми и дробными.
- С датами.
- С текстом.
У данного оператора between SQL есть определенные особенности. Познакомимся с ними:
- При работе с числами и датами значения ограничений «От и До» включаются в выборку.
- Значение нижней границы диапазона должно быть меньше значения верхней границы, иначе не будет выведено ничего, ведь условие логически не верно. Особенно внимательным нужно быть, когда вместо конкретных значений в условие включаются переменные.
При работе с текстом значение верхней границы диапазона не будет включено в выборку, если оно не указано предельно точно. В следующих разделах рассмотрим данную особенность подробнее.
Выборка чисел и дат в определенном диапазоне
Подготовим таблицу с данными по менеджерам, работающим в организации. Таблица будет иметь следующую структуру:
В этой статье мы рассмотрим логический оператор BETWEEN языка T-SQL, Вы узнаете, что это за оператор и как его использовать. А также мы, конечно же, разберём примеры SQL запросов с применением оператора BETWEEN.
Оператор BETWEEN в языке T-SQL
BETWEEN – это логический оператор языка T-SQL, который определяет диапазон для проверки. Другими словами, с помощью BETWEEN мы можем проверить, входит ли значение в определённый диапазон.
Синтаксис
test_expression [ NOT ] BETWEEN begin_expression AND end_expression
Описание аргументов
- test_expression – выражение, которое подлежит проверке на принадлежность к диапазону в пределах от begin_expression до end_expression;
- begin_expression – выражение, характеризующее начала диапазона;
- end_expression – выражение, характеризующее конец диапазона.
Все выражения должны иметь одинаковый тип данных.
В качестве результата оператор BETWEEN возвращает значения (Boolean):
- TRUE – если значение аргумента test_expression больше или равно значению begin_expression, при этом меньше или равно значению end_expression, т.е. test_expression входит в диапазон от begin_expression до end_expression;
- FALSE – если значение аргумента test_expression не входит в диапазон от begin_expression до end_expression.
С помощью ключевого слова NOT мы можем инвертировать результат предиката, иными словами, NOT BETWEEN означает, что мы хотим проверить значение на предмет того, что оно не входит в заданный диапазон.
В данном случае оператор NOT BETWEEN вернет TRUE, если значение аргумента test_expression не входит в диапазон от begin_expression до end_expression.
В случае если в BETWEEN хотя бы одно из выражений будет содержать значение NULL, результат будет не определён.
Заметка! Напоминаю, что необходимо всегда помнить о том, что существуют такие значения как NULL (это не пусто и не 0, это отсутствие значения), которые обрабатывается SQL сервером по-особому, результат SQL запроса с участием NULL-значений может быть неочевиден и непредсказуем.
Заметка! Если Вы начинающий программист и хотите изучить язык T-SQL с нуля, то рекомендую почитать мою книгу «Путь программиста T-SQL», в ней я подробно рассказываю про основы языка T-SQL, а также уделяю немало внимания и продвинутым конструкциям.
Исходные данные для примеров
В качестве сервера у меня выступает Microsoft SQL Server 2016 Express. Для примера давайте представим, что у нас есть таблица TestTable, и в ней содержатся следующие данные (перечень товаров с указанием цены). Строки в таблицу я добавляю с помощью инструкции INSERT INTO.
Пример использования оператора BETWEEN в секции WHERE
Давайте напишем SQL запрос, который выведет нам все товары, цена которых находится в диапазоне от 100 до 200 рублей включительно.
Данный запрос мы могли бы написать и без использования оператора BETWEEN, например, следующий SQL запрос абсолютно эквивалентен.
Как видим, результат одинаковый, но в случае с BETWEEN условие выглядит более наглядно и понятно, к тому же выражение для проверки (Price) мы записали всего один раз, в случае с операторами сравнения два.
Пример использования оператора BETWEEN в условной конструкции IF
Оператор BETWEEN можно использовать не только в секции WHERE, но и в других конструкциях языка T-SQL, например, в условной конструкции IF. В следующем примере мы проверим переменную @TestVar на предмет того, входит ли значение этой переменной в диапазон от 1 до 10 и, если входит, выполним нужное нам действия, я для примера просто пошлю запрос SELECT.
Пример использования оператора NOT BETWEEN
Сейчас давайте напишем запрос с применением ключевого слова NOT, например, нам нужно вывести все товары, цена которых не входит в диапазон от 100 до 200 рублей (эквивалентный пример с использованием операторов сравнения я также прилагаю).
В данном случае нам вывелись все товары, цена которых меньше 100 или больше 200 рублей.
В языке T-SQL кроме оператора BETWEEN существуют и другие логические операторы, например, оператор EXISTS, который в некоторых случаях бывает очень полезен, его мы также рассматривали на этом сайте.
Оператор BETWEEN выбирает значения в заданном диапазоне. Значения могут быть числами, текстом или датами.
Синтаксис BETWEEN
Следующий оператор SQL выбирает все продукты с ценой BETWEEN 5 и 200:
Пример:
Пример NOT BETWEEN
Чтобы отобразить товары вне диапазона предыдущего примера, используйте NOT BETWEEN:
Пример:
Пример BETWEEN с IN
Следующий оператор SQL выбирает все товары с ценой BETWEEN 5 и 200 и не показывать товары с категориями 1, 2, 3, 4, 5.
Пример:
BETWEEN текстовых значений
Следующий оператор SQL выбирает все товары с name BETWEEN ‘Красный телефон’ и ‘Серебристая клавиатура’:
Пример:
NOT BETWEEN текстовых значений
Следующий оператор SQL выбирает все продукты с name NOT BETWEEN ‘Красный телефон’ и ‘Серебристая клавиатура’:
Пример:
Пример BETWEEN с датами
Следующий оператор SQL выбирает все счета с помощью date BETWEEN.