Оператор SQL BETWEEN: синтаксис, примеры

Оператор SQL BETWEEN задает диапазон, в котором будет осуществляться проверка условия.

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

test_expression [NOT] BETWEEN begin_expression AND end_expression
  • test_expression — задает объект для проверки по диапазону;
  • start_expression — начальное значение диапазона;
  • end_expression — конечное значение диапазона;

Примеры оператора SQL BETWEEN: Имеется следующая таблица Universities:

IDUniversityNameStudentsFaculties
ProfessoresLocationSite
1Perm State National Research University12400121229Permpsu. ru
2Saint Petersburg State University213002413126Saint-Petersburg spbu.ru
3Novosibirsk State University7200131527Novosibirsknsu.ru
4Moscow State University351003914358Moscowmsu.ru
5Higher School of Economics20335121615Moscowhse.ru
6Ural Federal University57000195640Yekaterinburgurfu.ru
7National Research Nuclear University860010936Moscowmephi.ru

Пример 1. Используя оператор SQL BETWEEN вывести записи тех университетов, число студентов (Students) которых от 10000 до 30000:

SELECT *
FROM Universities
WHERE Students BETWEEN 10000 AND 30000

Результат:

IDUniversityNameStudentsFacultiesProfessoresLocationSite
1Perm State National Research University12400121229Permpsu. ru
2Saint Petersburg State University213002413126Saint-Petersburg spbu.ru
5Higher School of Economics20335121615Moscowhse.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

Результат:

IDUniversityNameStudentsFacultiesProfessoresLocationSite
1Perm State National Research University12400121229Permpsu. ru
3Novosibirsk State University7200131527Novosibirsknsu.ru
4Moscow State University351003914358Moscowmsu.ru
5Higher School of Economics20335121615Moscowhse.ru
7National Research Nuclear University860010936Moscowmephi.ru

На что стоит обратить внимание, применяя оператор between в SQL? — Разработка на vc.ru

Существует большое количество правил написания запросов SQL и они, несомненно, приводят к заметным и качественным результатам обработки данных. Но, иногда, даже при написании простых запросов, ускользают некоторые нюансы. О них и пойдет речь в данной статье.

1515 просмотров

В ходе работы с одной из БД, содержащих данные о транспортных средствах, возникла необходимость выгрузить модели автотранспорта, названия которых начинаются в диапазоне от

«А» до «D».

Написав запрос на 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

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

Как видно из примера, выведены только значения, начинающиеся

с А до С, за исключением строчки, где значение равно D.

Дело в том, что так оператор between сравнивает строки неравной длины. Строка «D» короче строки «Dodge» и, при сравнении, дополняется пробелами. Но при сортировке по алфавиту пробелы окажутся опережающими символами и поэтому строка в выборку не попадает.

Выражение «Имя» between ‘A’AND ‘D’эквивалентно «имя» >= ‘A’AND «имя» <= ‘D’

То есть, «Audi» и «Chevrolet» это >= ‘A’AND <= ‘D’, что удовлетворяет условию, но «Dodge»

— это не <= ‘D’. «Dodge» — это > ‘D’.

Чтобы получить все строки, начинающиеся от А до 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 указан без временной части даты.