Условие поиска (Transact-SQL)
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечной точке аналитики платформы Аналитики Azure Synapse Analytics (PDW) в Microsoft Fabric Хранилище в базе данных Microsoft Fabric SQL в Microsoft Fabric
Сочетание одного или нескольких предикатов, использующих логические операторы AND
, OR
и NOT
.
Соглашения о синтаксисе Transact-SQL
Синтаксис
Синтаксис для SQL Server, База данных SQL Azure и Управляемый экземпляр SQL Azure.
<search_condition> ::=
MATCH (<graph_search_pattern>) | <search_condition_without_match> | <search_condition> AND <search_condition>
<search_condition_without_match> ::=
{ [ NOT ] <predicate> | ( <search_condition_without_match> ) }
[ { AND | OR } [ NOT ] { <predicate> | ( <search_condition_without_match> ) } ]
[ ...n ]
<predicate> ::=
{ expression { = | <> | != | > | >= | !> | < | <= | !< } expression
| string_expression [ NOT ] LIKE string_expression
[ ESCAPE 'escape_character' ]
| expression [ NOT ] BETWEEN expression AND expression
| expression IS [ NOT ] NULL
| expression IS [ NOT ] DISTINCT FROM
| CONTAINS
( { column | * } , '<contains_search_condition>' )
| FREETEXT ( { column | * } , 'freetext_string' )
| expression [ NOT ] IN ( subquery | expression [ , ...n ] )
| expression { = | < > | != | > | >= | ! > | < | <= | ! < }
{ ALL | SOME | ANY } ( subquery )
| EXISTS ( subquery ) }
<graph_search_pattern> ::=
{ <node_alias> {
{ <-( <edge_alias> )- }
| { -( <edge_alias> )-> }
<node_alias>
}
}
<node_alias> ::=
node_table_name | node_table_alias
<edge_alias> ::=
edge_table_name | edge_table_alias
Синтаксис для Azure Synapse Analytics и параллельного хранилища данных.
< search_condition > ::=
{ [ NOT ] <predicate> | ( <search_condition> ) }
[ { AND | OR } [ NOT ] { <predicate> | ( <search_condition> ) } ]
[ ...n ]
<predicate> ::=
{ expression { = | <> | != | > | >= | < | <= } expression
| string_expression [ NOT ] LIKE string_expression
| expression [ NOT ] BETWEEN expression AND expression
| expression IS [ NOT ] NULL
| expression [ NOT ] IN (subquery | expression [ , ...n ] )
| expression [ NOT ] EXISTS (subquery)
}
Аргументы
<search_condition>
Указывает условия для строк, возвращаемых в результирующем наборе для SELECT
инструкции, выражения запроса или вложенного запроса. Для инструкции UPDATE
указывает строки, которые необходимо обновить. Для инструкции DELETE
указывает строки, которые нужно удалить. Количество предикатов, которые можно включить в условие поиска инструкции Transact-SQL, не ограничено.
<graph_search_pattern>
Определяет шаблон сопоставления графов. Дополнительные сведения о аргументах для этого предложения см. в разделе MATCH
Логическое НЕ
Инвертирует логическое выражение, задаваемое предикатом. Дополнительные сведения см. в разделе NOT.
И
Объединяет два условия и оценивается, TRUE
когда оба условия являются TRUE
. Дополнительные сведения см. в разделе AND.
ИЛИ
Объединяет два условия и оценивается в TRUE
том случае, если это TRUE
условие. Дополнительные сведения см. в разделе OR.
<predicate>
Выражение, возвращающее TRUE
, FALSE
или UNKNOWN
. Дополнительные сведения см. в статье Элементы Predicates и PredicateValidations.
выражение
Задает имя столбца, константу, функцию, переменную, скалярный вложенный запрос или любую комбинацию имен столбцов, констант и функций, подключенных оператором или операторами, или вложенным запросом. Выражение также может содержать CASE
выражение.
Строковые константы и переменные не в Юникоде используют кодовую страницу, соответствующую параметрам сортировки базы данных, действующим по умолчанию. Преобразования кодовых страниц могут происходить при работе только с символьными данными не в Юникоде и упоминании символьных типов данных char, varchar и text не в Юникоде. SQL Server преобразует константы строк и переменные, отличные от Юникода, в кодовую страницу, соответствующую сортировке ссылочного столбца или указанному с помощью COLLATE
, если эта кодовая страница отличается от кодовой страницы, соответствующей параметрам сортировки по умолчанию базы данных. Все символы, не найденные на новой кодовой странице, преобразуются в аналогичный символ, если можно найти лучшее сопоставление , или в противном случае преобразуются в символ замены ?
по умолчанию.
При работе с несколькими кодовыми страницами константы символов можно префиксировать с помощью прописной буквы N
, а переменные Юникода можно использовать, чтобы избежать преобразования кодовых страниц.
Оператор =
Оператор, используемый для проверки равенства между двумя выражениями.
Оператор <>
Оператор, используемый для проверки условия двух выражений, не равных друг другу.
Оператор !=
Оператор, используемый для проверки условия двух выражений, не равных друг другу.
Оператор >
Оператор, используемый для проверки условия одного выражения, больше другого.
Оператор >=
Оператор, используемый для проверки условия одного выражения, превышающего или равное другому выражению.
Оператор !>
Оператор, используемый для проверки условия одного выражения, не превышающего другое выражение.
Оператор <
Оператор, используемый для проверки условия одного выражения, меньше другого.
Оператор <=
Оператор, используемый для проверки условия одного выражения меньше или равно другому выражению.
Оператор !<
Оператор, используемый для проверки условия одного выражения, не меньше другого выражения.
string_expression
Строка символов и подстановочных знаков.
[ НЕ ] ЛЮБИТЬ
Указывает, что последующая строка символов будет использоваться с сопоставлением шаблонов. Дополнительные сведения см. в разделе LIKE.
ESCAPE "символ escape_"
Позволяет найти сам символ-шаблон в строке (вместо того чтобы использовать его как шаблон). escape_character — это символ, который нужно поместить перед символом-шаблоном, чтобы указать данное специальное использование.
[ НЕ ] МЕЖДУ
Задает включающий диапазон значений. Используется AND
для разделения начальных и конечных значений. Дополнительные сведения см. в разделе BETWEEN.
IS [ NOT ] NULL
Указывает поиск значений NULL или значений, которые не являются null, в зависимости от используемых ключевых слов. Выражение с битовым или арифметическим оператором вычисляется, NULL
если один из операндов имеет значение NULL
.
IS [ NOT ] DISTINCT FROM
Сравнивает равенство двух выражений и гарантирует истинный или ложный результат, даже если один или оба операнда являются NULL
. Дополнительные сведения см. в статье IS [NOT] DISTINCT FROM (Transact-SQL).
CONTAINS
Осуществляет поиск столбцов, содержащих символьные данные с заданной точностью (fuzzy), соответствующие заданным отдельным словам и фразам на основе похожести словам и точному расстоянию между словами, взвешенному совпадению. Этот параметр можно использовать только с SELECT
операторами. Дополнительные сведения см. в разделе CONTAINS.
FREETEXT
Предоставляет простую форму естественного языка ввода запросов на осуществление поиска столбцов, содержащих символьные данные, совпадающие с содержанием предиката не точно, а по смыслу. Этот параметр можно использовать только с SELECT
операторами. Дополнительные сведения см. в разделе FREETEXT.
[ NOT ] IN
Задает поиск выражения, основанного на выражении, включенного или исключенного из списка. Выражение поиска может быть константой или именем столбца, а списком может быть набор констант или, что чаще, вложенный запрос. Список значений необходимо заключать в скобки. Дополнительные сведения см. в разделе IN.
subquery
Можно считать ограниченной SELECT
инструкцией и похожа <query_expression>
на инструкцию SELECT
. Предложение и ключевое ORDER BY
INTO
слово не допускаются. Дополнительные сведения см. в разделе SELECT.
ВСЕ
Используется с оператором сравнения и вложенным запросом. Возвращает значение TRUE
, <predicate>
когда все значения, полученные для вложенного запроса, удовлетворяют операции сравнения или если не все значения удовлетворяют сравнению или FALSE
когда вложенный запрос не возвращает строки во внешнюю инструкцию. Дополнительные сведения см. в разделе ALL.
{ SOME | ANY }
Используется с оператором сравнения и вложенным запросом. Возвращает значение TRUE
, <predicate>
когда любое значение, полученное для вложенного запроса, удовлетворяет операции сравнения или если никакие значения в вложенных запросах не удовлетворяют сравнению или FALSE
когда вложенный запрос не возвращает строки во внешнюю инструкцию. В противном случае выражение равно UNKNOWN
. Дополнительные сведения см. в разделе "НЕКОТОРЫЕ" | ANY.
EXISTS
Используется во вложенном запросе для проверки существования строк, возвращенных вложенным запросом. Дополнительные сведения см. в разделе "СУЩЕСТВУЕТ".
Замечания
Приоритеты выполнения логических операторов распределяются следующим образом: NOT
(наивысший приоритет), AND
, OR
(низший приоритет). Для перераспределения указанных приоритетов в условии поиска используются скобки. Порядок выполнения логических операторов может меняться в зависимости от настроек оптимизатора запросов. Дополнительные сведения о том, как логические операторы работают со значениями логики, см. в разделе AND, OR и NOT.
Примеры
Примеры кода Transact-SQL в этой статье используют AdventureWorks2022
базу данных или AdventureWorksDW2022
пример базы данных, которую можно скачать с домашней страницы примеров и проектов сообщества Microsoft SQL Server.
А. Использование WHERE с синтаксисом LIKE и ESCAPE
В ходе выполнения следующего примера производится поиск строк, для которых элементы столбца LargePhotoFileName
содержат символы green_
, а также для символа-шаблона _
используется параметр ESCAPE
. Если параметр не указан ESCAPE
, запрос ищет значения описания, содержащие слово green
, за которым следует любой один символ, отличный от символа _
.
USE AdventureWorks2022;
GO
SELECT *
FROM Production.ProductPhoto
WHERE LargePhotoFileName LIKE '%greena_%' ESCAPE 'a';
B. Использование синтаксиса WHERE и LIKE с данными Юникода
В следующем примере используется предложение WHERE
для отображения всех адресов офисов компаний, находящихся за пределами США (US
) и в городах, названия которых начинаются с Pa
.
USE AdventureWorks2022;
GO
SELECT AddressLine1,
AddressLine2,
City,
PostalCode,
CountryRegionCode
FROM Person.Address AS a
INNER JOIN Person.StateProvince AS s
ON a.StateProvinceID = s.StateProvinceID
WHERE CountryRegionCode NOT IN ('US')
AND City LIKE N'Pa%';
Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)
В. Использование WHERE с LIKE
В следующем примере производится поиск строк, в которых столбец LastName
содержат символы and
.
-- Uses AdventureWorks
SELECT EmployeeKey,
LastName
FROM DimEmployee
WHERE LastName LIKE '%and%';
D. Использование синтаксиса WHERE и LIKE с данными Юникода
В следующем примере используется предложение WHERE
для выполнения поиска в формате Юникод в столбце LastName
.
-- Uses AdventureWorks
SELECT EmployeeKey,
LastName
FROM DimEmployee
WHERE LastName LIKE N'%and%';