Оператор SQL BETWEEN: синтаксис, примеры
Оператор SQL BETWEEN задает диапазон, в котором будет осуществляться проверка условия.
Оператор SQL BETWEEN имеет следующий синтаксис:
test_expression [NOT] BETWEEN begin_expression AND end_expression
- test_expression — задает объект для проверки по диапазону;
- start_expression — начальное значение диапазона;
- end_expression — конечное значение диапазона;
Примеры оператора SQL BETWEEN: Имеется следующая таблица Universities:
ID | UniversityName | Students | Faculties | Professores | Location | Site |
1 | Perm State National Research University | 12400 | 12 | 1229 | Perm | psu. ru |
2 | Saint Petersburg State University | 21300 | 24 | 13126 | Saint-Petersburg | spbu.ru |
3 | Novosibirsk State University | 7200 | 13 | 1527 | Novosibirsk | nsu.ru |
4 | Moscow State University | 35100 | 39 | 14358 | Moscow | msu.ru |
5 | Higher School of Economics | 20335 | 12 | 1615 | Moscow | hse.ru |
6 | Ural Federal University | 57000 | 19 | 5640 | Yekaterinburg | urfu.ru |
7 | National Research Nuclear University | 8600 | 10 | 936 | Moscow | mephi.ru |
Пример 1. Используя оператор SQL BETWEEN вывести записи тех университетов, число студентов (Students) которых от 10000 до 30000:
SELECT * FROM Universities WHERE Students BETWEEN 10000 AND 30000
Результат:
ID | UniversityName | Students | Faculties | Professores | Location | Site |
1 | Perm State National Research University | 12400 | 12 | 1229 | Perm | psu. ru |
2 | Saint Petersburg State University | 21300 | 24 | 13126 | Saint-Petersburg | spbu.ru |
5 | Higher School of Economics | 20335 | 12 | 1615 | Moscow | hse.ru |
Данный пример можно так же записать и с помощью операторов сравнения (<,>,=) и оператора SQL WHERE. Так, нижеприведенный код будет выведет точно такой же результат:
SELECT * FROM Universities WHERE Students > 10000 AND Students < 30000
Пример 2. Используя оператор SQL BETWEEN вывести записи университетов, число преподавателей (Professores) которых менее 2000 и более 14000:
SELECT * FROM Universities WHERE Professores NOT BETWEEN 2000 AND 14000
Результат:
ID | UniversityName | Students | Faculties | Professores | Location | Site |
1 | Perm State National Research University | 12400 | 12 | 1229 | Perm | psu. ru |
3 | Novosibirsk State University | 7200 | 13 | 1527 | Novosibirsk | nsu.ru |
4 | Moscow State University | 35100 | 39 | 14358 | Moscow | msu.ru |
5 | Higher School of Economics | 20335 | 12 | 1615 | Moscow | hse.ru |
7 | National Research Nuclear University | 8600 | 10 | 936 | Moscow | mephi.ru |
На что стоит обратить внимание, применяя оператор between в SQL? — Разработка на vc.ru
Существует большое количество правил написания запросов SQL и они, несомненно, приводят к заметным и качественным результатам обработки данных. Но, иногда, даже при написании простых запросов, ускользают некоторые нюансы. О них и пойдет речь в данной статье.
1515 просмотров
В ходе работы с одной из БД, содержащих данные о транспортных средствах, возникла необходимость выгрузить модели автотранспорта, названия которых начинаются в диапазоне от
Написав запрос на SQL, с помощью оператора between,в результатах выгрузки не оказалось таких марок авто, как datsun и daewoo, которые точно были в базе данных.
Начав разбираться, стало понятно следующее — если Вам нужно применить оператор between, который выбирает при запросе все значения из заданного диапазона (включая границы), то с датами и числовыми значениями не возникает трудностей, а вот с текстовыми строками всё иначе т.к. значение верхней границы диапазона не будет включено в выборку, если оно не указано точно.
Пример:
Итак, у нас есть таблица «table1» со столбцом «model_car» (тип данных varchar) из которой нам необходимо вывести ее часть, где названия марок автомобилей лежат в диапазоне от А до D.
Таблица table1:
Если выполнить следующий запрос:
SELECT * FROM table1 WHERE model_car BETWEEN ‘A’ AND ‘D’ ORDER BY model_car
То результат его выполнения будет следующим:
Как видно из примера, выведены только значения, начинающиеся
Дело в том, что так оператор between сравнивает строки неравной длины. Строка «D» короче строки «Dodge» и, при сравнении, дополняется пробелами. Но при сортировке по алфавиту пробелы окажутся опережающими символами и поэтому строка в выборку не попадает.
Выражение «Имя» between ‘A’AND ‘D’эквивалентно «имя» >= ‘A’AND «имя» <= ‘D’
То есть, «Audi» и «Chevrolet» это >= ‘A’AND <= ‘D’, что удовлетворяет условию, но «Dodge»
Чтобы получить все строки, начинающиеся от А до D включительно, то необходимо было в запросе написать так:
model_car BETWEEN ‘A’ AND ‘E’
Такой нюанс существует только при работе с символьными данными, поэтому нужно быть внимательным, даже при работе с таким простым оператором, как between.
SQL — универсальный язык, поэтому нашу задачу можно было выполнить другими способами:
- через операторы сравнения. Операторы сравнения – это математические символы, которые указывают на определенный тип сравнения между двумя значениями (= равно; > больше; < меньше; >= больше или равно; <= меньше или равно; <> не равно)
SELECT * FROM table1 WHERE MODEL_CAR <‘E’
- через оператор LIKE. Оператор LIKE используется для того, чтобы находить значение по определённому шаблону. В качестве условия он использует групповые символы, которые могут соответствовать чему-нибудь. Например, знак подчеркивания (_) замещает собой одиночный символ, а знак процента (%) позволяет нам сопоставлять строку любой длины.
SELECT * FROM table1 WHERE MODEL_CAR LIKE ‘A%’ or MODEL_CAR LIKE ‘B%’ or MODEL_CAR LIKE ‘C%’ or MODEL_CAR LIKE ‘D%’
- через функцию substring и оператор IN.
Функция substring извлекает из выражения, которое мы указываем, часть заданной длины начиная от заданной позиции. В нашем случае мы указываем столбец с названиями автомобилей и выделяем только первую букву. Далее через оператора IN определяем набор значений, в который данное значение может быть включено, т.е. указываем перечень автомобилей, которые начинаются с А, В, С, D.
SELECT *, SUBSTRING (MODEL_CAR,1,1) FROM table1 where SUBSTRING (MODEL_CAR,1,1) IN (‘A’, ‘B’, ‘C’, ‘D’)
Какой запрос выбрать, для обработки подобных данных, решать только вам. В свою очередь, надеемся, что эти советы помогут в решении поставленной задачи.
SQL Server BETWEEN на практических примерах
Резюме : в этом руководстве вы узнаете, как использовать оператор SQL Server BETWEEN
для указания диапазона для проверки.
Обзор оператора SQL Server
BETWEEN
Оператор BETWEEN
— это логический оператор, позволяющий указать диапазон для проверки.
Ниже показан синтаксис оператора BETWEEN
:
столбец | выражение МЕЖДУ start_expression И end_expression Язык кода: SQL (язык структурированных запросов) (sql)
В этом синтаксисе:
- Сначала укажите столбец или выражение для проверки.
- Во-вторых, поместите
start_expression
иend_expression
между ключевыми словамиBETWEEN
иAND
.start_expression
,end_expression
и проверяемое выражение
МЕЖДУ 9Оператор 0006 возвращает
TRUE
, если проверяемое выражение больше или равно значению start_expression
и меньше или равно значению end_expression
.
Вы можете использовать больше или равно (>=) и меньше или равно (<=) для замены оператора МЕЖДУ
следующим образом:
столбец | выражение <= end_expression И столбец | выражение >= начальное_выражение Язык кода: SQL (язык структурированных запросов) (sql)
Условие, использующее оператор BETWEEN
, намного читабельнее, чем условие, использующее операторы сравнения >=, <= и логический оператор AND
.
Чтобы свести на нет результат оператора МЕЖДУ
, вы используете оператор НЕ МЕЖДУ
следующим образом:
столбец | выражение НЕ МЕЖДУ start_expression И end_expression Язык кода: SQL (язык структурированных запросов) (sql)
НЕ МЕЖДУ
возвращает TRUE
, если значение в столбце или выражении меньше значения start_expression
и больше значения end_expression
. Это эквивалентно следующему условию:
столбец | выражение < начальное_выражение И столбец | выражение > конечное_выражение Язык кода: SQL (язык структурированных запросов) (sql)
Обратите внимание, что если любой ввод МЕЖДУ
или НЕ МЕЖДУ
равен NULL
, тогда результат UNKNOWN
.
SQL Server
BETWEEN
примеров Давайте рассмотрим несколько примеров использования оператора BETWEEN
, чтобы понять, как он работает.
A) Использование SQL Server
МЕЖДУ
с номерами пример См. следующую таблицу продуктов
из примера базы данных:
Следующий запрос находит продукты, прейскурантные цены которых находятся между 149,99 и 199,99:
ВЫБЕРИТЕ Код товара, наименование товара, список цен ОТ производство.продукция ГДЕ list_price МЕЖДУ 1490,99 И 199,99 СОРТИРОВАТЬ ПО список цен; Язык кода: SQL (язык структурированных запросов) (sql)
Чтобы получить продукты, прейскурантные цены которых не находятся в диапазоне от 149,99 до 199,99, используйте оператор NOT BETWEEN
следующим образом:
SELECT Код товара, наименование товара, список цен ОТ производство.продукция ГДЕ list_price НЕ МЕЖДУ 149,99 И 199,99 СОРТИРОВАТЬ ПО список цен; Язык кода: SQL (язык структурированных запросов) (sql)
B) Использование SQL Server
МЕЖДУ
с датами пример Рассмотрим следующую таблицу заказов
:
Следующий запрос находит заказы, размещенные клиентами между 15 января 2017 г.
и 17 января 2017 г. 2017
:
ВЫБЕРИТЕ номер заказа, Пользовательский ИД, Дата заказа, статус заказа ОТ заказы на продажу ГДЕ order_date МЕЖДУ "20170115" И "20170117" СОРТИРОВАТЬ ПО Дата заказа; Язык кода: SQL (язык структурированных запросов) (sql)
Обратите внимание, что для указания буквальной даты используется формат « ГГГГММДД
», где ГГГГ
— это 4-значный год, например, 2017, MM
— это 2-значный месяц, например, 01 и 900. 05 ДД это 2 -цифры день, например, 15.
В этом руководстве вы узнали, как использовать оператор SQL Server BETWEEN
для формирования условия, которое проверяет диапазон значений.
МЕЖДУ (Transact-SQL) — SQL Server
- Статья
Применяется к: SQL Server Azure SQL База данных Azure SQL Управляемый экземпляр Azure Synapse Analytics Analytics Platform System (PDW) Конечная точка SQL в Microsoft Fabric Warehouse в Microsoft Fabric
Указывает диапазон для тестирования.
Соглашения о синтаксисе Transact-SQL
Синтаксис
test_expression [ НЕ ] МЕЖДУ begin_expression И end_expression
Примечание
Для просмотра синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий см. документацию по предыдущим версиям.
Аргументы
test_expression
Выражение для проверки в диапазоне, определяемом begin_expression и end_expression . test_expression должен иметь тот же тип данных, что и begin_expression и конечное_выражение .
NOT
Указывает, что результат предиката должен быть инвертирован.
begin_expression
Любое допустимое выражение. begin_expression должен иметь тот же тип данных, что и test_expression и end_expression .
end_expression
Любое допустимое выражение. end_expression должен иметь тот же тип данных, что и test_expression , и begin_expression .
И
Действует как заполнитель, указывающий, что test_expression должно находиться в диапазоне, указанном begin_expression и end_expression .
Типы результатов
Булево значение
Значение результата
BETWEEN возвращает TRUE , если значение test_expression больше или равно значению 9 0197 begin_expression и меньше или равно значению end_expression .
NOT BETWEEN возвращает TRUE , если значение test_expression меньше значения begin_expression или больше значения end_expression .
Чтобы указать исключительный диапазон, используйте операторы больше (>) и меньше (<). Если какие-либо входные данные для предиката BETWEEN или NOT BETWEEN имеют значение NULL, результатом будет UNKNOWN.
Примеры
A. Использование BETWEEN
В следующем примере возвращается информация о ролях базы данных в базе данных. Первый запрос возвращает все роли. Во втором примере используется 9Предложение 0005 BETWEEN , чтобы ограничить роли указанными значениями database_id
.
ВЫБЕРИТЕ имя_пользователя, имя ОТ sys.database_principals ГДЕ тип = 'R'; ВЫБЕРИТЕ Principal_id, имя ОТ sys.database_principals ГДЕ тип = 'R' И Principal_id МЕЖДУ 16385 И 16390; ИДТИ
Вот набор результатов.
имя_идентификатора_пользователя ------------ ---- 0 публичный 16384 db_owner 16385 db_accessadmin 16386 db_securityadmin 16387 db_ddladmin 16389db_backupoperator 16390 db_datareader 16391 db_datawriter 16392 db_denydatareader 16393 db_denydatawriter
имя_идентификатора_пользователя ------------ ---- 16385 db_accessadmin 16386 db_securityadmin 16387 db_ddladmin 16389 db_backupoperator 16390 db_datareader
B.
Использование > и < вместо BETWEEN В следующем примере используется больше ( >
) и меньше ( < 9)0006 ) и, поскольку эти операторы не являются инклюзивными, возвращает девять строк вместо десяти, которые были возвращены в предыдущем примере.
-- Использует AdventureWorks ВЫБЕРИТЕ e.FirstName, e.LastName, ep.Rate ОТ HumanResources.vEmployee e ПРИСОЕДИНЯЙТЕСЬ к HumanResources.EmployeePayHistory ep ON e.BusinessEntityID = ep.BusinessEntityID ГДЕ ep.Rate > 27 И ep.Rate < 30 ЗАКАЗАТЬ ПО ЭП.Рейт; ИДТИ
Вот набор результатов.
Имя Фамилия Скорость --------- ------ --------- Паула Баррето де Маттос 27,1394 Джанаина Буэно 27,4038 Дэн Бэкон 27,4038 Рамеш Мейяппан 27.4038 Карен Берг 27.4038 Дэвид Брэдли 28.7500 Хазем Аболрус 28.8462 Овидиу Крациум 28,8462 Роб Уолтерс 29,8462
C. Использование NOT BETWEEN
В следующем примере выполняется поиск всех строк за пределами указанного диапазона от 27
до 30
.
-- использует AdventureWorks ВЫБЕРИТЕ e.FirstName, e.LastName, ep.Rate ОТ HumanResources.vEmployee e ПРИСОЕДИНЯЙТЕСЬ к HumanResources.EmployeePayHistory ep ON e.BusinessEntityID = ep.BusinessEntityID ГДЕ ep.Rate НЕ МЕЖДУ 27 И 30 ЗАКАЗАТЬ ПО ЭП.Рейт; ИДТИ
D. Использование BETWEEN со значениями даты и времени
В следующем примере извлекаются строки, в которых значения даты и времени находятся между '20011212'
и '20020105'
включительно.
-- Использует AdventureWorks ВЫБЕРИТЕ BusinessEntityID, RateChangeDate ИЗ HumanResources.EmployeePayHistory ГДЕ RateChangeDate МЕЖДУ "20011212" И "20020105";
Вот набор результатов.
BusinessEntityID Ратечанжедате ----------- ----------------------- 3 2001-12-12 00:00:00.000 4 05.01.2002 00:00:00.000
Запрос извлекает ожидаемые строки, поскольку значения даты в запросе и значения datetime , хранящиеся в Столбец RateChangeDate
указан без временной части даты.