Условие поиска (Transact-SQL)

Область применения: SQL Server (все поддерживаемые версии) База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics Analytics Platform System (PDW)

Сочетание одного или нескольких предикатов, в котором используются логические операторы AND, OR и NOT.

Синтаксические обозначения в Transact-SQL

Синтаксис

-- Syntax for SQL Server and Azure SQL Database  
  
<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
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse  
  
< 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)
    }

Примечание

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

<search_condition>
Задает условия для строк, возвращаемых в результирующем наборе инструкции SELECT, выражения запроса или вложенного запроса. Задает обновляемые строки для инструкции UPDATE. Задает удаляемые строки для инструкции DELETE. Количество предикатов, которое может содержаться в условии поиска для инструкции Transact-SQL, не ограничено.

<graph_search_pattern>
Определяет шаблон сопоставления графов. Дополнительные сведения об аргументах этого предложения см. в статье MATCH (Transact-SQL)

NOT
Инвертирует логическое выражение, задаваемое предикатом. Дополнительные сведения см. в разделе NOT (Transact-SQL).

AND
Объединяет два условия и выдает значение TRUE, если оба условия имеют значение TRUE. Дополнительные сведения см. в разделе AND (Transact-SQL).

OR
Объединяет два условия и выдает значение TRUE, если хотя бы одно условие имеет значение TRUE. Дополнительные сведения см. в статье OR (Transact-SQL).

< predicate >
Выражение, возвращающее значения TRUE, FALSE или UNKNOWN.

expression
Может являться именем столбца, константой, функцией, переменной, скалярным вложенным запросом или любым сочетанием имен столбцов, констант и функций, связанных операторами или вложенным запросом. Также может содержать выражение CASE.

Примечание

Строковые константы и переменные не в Юникоде используют кодовую страницу, соответствующую параметрам сортировки базы данных, действующим по умолчанию. Преобразования кодовых страниц могут происходить при работе только с символьными данными не в Юникоде и упоминании символьных типов данных char, varchar и text не в Юникоде. SQL Server преобразует строковые константы и переменные не в Юникоде в кодовую страницу, соответствующую параметрам сортировки упоминаемого столбца или столбца, указанного с помощью предложения COLLATE, если эта кодовая страница отличается от кодовой страницы, соответствующей параметрам сортировки по умолчанию базы данных. Символы, не найденные на новой кодовой странице, преобразуются в похожий символ при обнаружении наилучшего соответствия либо, в противном случае, преобразуются в символ замены по умолчанию "?".

Чтобы при работе с несколькими кодовыми страницами избежать их преобразования, можно использовать переменные Юникода, а символьные константы могут иметь префикс в виде прописной буквы N.

=
Оператор, используемый для проверки равенства двух выражений.

<>
Оператор, используемый для проверки условий неравенства условий двух выражений.

!=
Оператор, используемый для проверки условий неравенства условий двух выражений.

>
Оператор, используемый для проверки превышения одного выражения над условием другого.

>=
Оператор, используемый для проверки превышения либо равенства двух выражений.

!>
Оператор, используемый для проверки того, что одно выражение не превышает другое выражение.

<
Оператор, используемый для проверки того, что одно выражение меньше другого.

<=
Оператор, используемый для проверки того, что одно выражение меньше или равно другому.

!<
Оператор, используемый для проверки того, что одно выражение не меньше другого.

string_expression
Строка обычных символов и символов-шаблонов.

[ NOT ] LIKE
Указывает, что последующая строка символов будет использоваться с сопоставлением шаблонов. Дополнительные сведения см. в статье USE (Transact-SQL).

ESCAPE 'escape_ character'
Позволяет найти сам символ-шаблон в строке (вместо того чтобы использовать его как шаблон). escape_character — это символ, который нужно поместить перед символом-шаблоном, чтобы указать данное специальное использование.

[ NOT ] BETWEEN
Задает включающий диапазон значений. Используйте оператор AND для разделения начальных и конечных значений. Дополнительные сведения см. в разделе BETWEEN (Transact-SQL).

IS [ NOT ] NULL
Задает поиск значений NULL или значений, не являющихся значениями NULL, в зависимости от используемых ключевых слов. При обращении одного из операндов выражения с битовыми или арифметическими операторами в значение NULL указанное выражение также обращается в значение NULL.

IS [ NOT ] DISTINCT FROM
Сравнивает равенство двух выражений и гарантирует истинный или ложный результат, даже если один или оба операнда имеют значение NULL. Дополнительные сведения см. в статье IS [NOT] DISTINCT FROM (Transact-SQL).

CONTAINS
Осуществляет поиск столбцов, содержащих символьные данные с заданной точностью (fuzzy), соответствующие заданным отдельным словам и фразам на основе похожести словам и точному расстоянию между словами, взвешенному совпадению. Этот параметр может быть использован только в инструкции SELECT. Дополнительные сведения см. в статье CONTAINS (Transact-SQL).

FREETEXT
Предоставляет простую форму естественного языка ввода запросов на осуществление поиска столбцов, содержащих символьные данные, совпадающие с содержанием предиката не точно, а по смыслу. Этот параметр может быть использован только в инструкции SELECT. Дополнительные сведения см. в статье FREETEXT (Transact-SQL).

[ NOT ] IN
Задает поиск выражения, основанного на выражении, включенного или исключенного из списка. Выражение поиска может быть константой или именем столбца, а списком может быть набор констант или, что чаще, вложенный запрос. Список значений необходимо заключать в скобки. Дополнительные сведения см. в разделе IN (Transact-SQL).

subquery
Может рассматриваться как ограниченная инструкция SELECT и действует аналогично <query_expresssion> в инструкции SELECT. Использование предложения ORDER BY и ключевого слова INTO не допускается. Дополнительные сведения см. в разделе SELECT (Transact-SQL).

ALL
Используется с оператором сравнения и вложенным запросом. Возвращает для <predicate> значение TRUE, если все получаемые для вложенного запроса значения удовлетворяют условию, и значение FALSE, если не все значения удовлетворяют условию или в случае, когда в результате выполнения вложенного запроса внешней инструкции не выдается ни одной строки. Дополнительные сведения см. в разделе ALL (Transact-SQL).

{ SOME | ANY }
Используется с оператором сравнения и вложенным запросом. Возвращает для <predicate> значение TRUE, если хотя бы одно получаемое для вложенного запроса значение удовлетворяет условию, и значение FALSE, если ни одно из значений не удовлетворяет условию или в случае, когда в результате выполнения вложенного запроса внешней инструкции не выдается ни одной строки. В противном случае результатом выражения является значение UNKNOWN. Дополнительные сведения см. в статье SOME | ANY (Transact-SQL).

EXISTS
Используется во вложенном запросе для проверки существования строк, возвращенных вложенным запросом. Дополнительные сведения см. в статье EXISTS (Transact-SQL).

Remarks

Приоритеты выполнения логических операторов распределяются следующим образом: NOT (наивысший приоритет), AND, OR (низший приоритет). Для перераспределения указанных приоритетов в условии поиска используются скобки. Порядок выполнения логических операторов может меняться в зависимости от настроек оптимизатора запросов. Дополнительные сведения о работе логических операторов с логическими значениями см. в статьях AND (Transact-SQL), OR (Transact-SQL) и NOT (Transact-SQL).

Примеры

A. Использование предложения WHERE с синтаксисом LIKE и ESCAPE

В ходе выполнения следующего примера производится поиск строк, для которых элементы столбца LargePhotoFileName содержат символы green_, а также для символа-шаблона _ используется параметр ESCAPE. Без указания параметра ESCAPE в ходе выполнения запроса будет производиться поиск всех описанных значений, содержащих слово green, за которым следует любой единичный символ, отличный от _.

USE AdventureWorks2012 ;  
GO  
SELECT *   
FROM Production.ProductPhoto  
WHERE LargePhotoFileName LIKE '%greena_%' ESCAPE 'a' ;  

Б. Использование предложения WHERE и синтаксиса LIKE с данными в Юникоде

В следующем примере используется предложение WHERE для отображения всех адресов офисов компаний, находящихся за пределами США (US) и в городах, названия которых начинаются с Pa.

USE AdventureWorks2012 ;  
GO  
SELECT AddressLine1, AddressLine2, City, PostalCode, CountryRegionCode    
FROM Person.Address AS a  
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%';  

Г. Использование предложения WHERE и синтаксиса LIKE с данными в Юникоде

В следующем примере используется предложение WHERE для выполнения поиска в формате Юникод в столбце LastName.

-- Uses AdventureWorks  
  
SELECT EmployeeKey, LastName  
FROM DimEmployee  
WHERE LastName LIKE N'%and%';  

См. также раздел