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

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

Значок ссылки на разделСоглашения о синтаксическом обозначении в Transact-SQL

Синтаксис

< search_condition > ::= 
    { [ NOT ] <predicate> | ( <search_condition> ) } 
    [ { AND | OR } [ NOT ] { <predicate> | ( <search_condition> ) } ] 
[ ,...n ] 
<predicate> ::= 
    { expression { = | < > | ! = | > | > = | ! > | < | < = | ! < } expression 
    | string_expression [ NOT ] LIKE string_expression 
  [ ESCAPE 'escape_character' ] 
    | expression [ NOT ] BETWEEN expression AND expression 
    | expression IS [ NOT ] NULL 
    | CONTAINS 
    ( { column | * } , '< contains_search_condition >' ) 
    | FREETEXT ( { column | * } , 'freetext_string' ) 
    | expression [ NOT ] IN ( subquery | expression [ ,...n ] ) 
    | expression { = | < > | ! = | > | > = | ! > | < | < = | ! < } 
  { ALL | SOME | ANY} ( subquery ) 
    | EXISTS ( subquery )     } 

Аргументы

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

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

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

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

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

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

    ПримечаниеПримечание

    При ссылке на типы данных символов Юникода nchar, nvarchar и ntext «выражение» должно начинаться с заглавной буквы «N». Если префикс «N» не указан, SQL Server выполнит преобразование строки в кодовую страницу, соответствующую параметрам сортировки базы данных или столбца, действующим по умолчанию. Любые символы, не входящие в эту кодовую страницу, будут утрачены.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Замечания

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

Примеры

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

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

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

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

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

USE AdventureWorks ;
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'Mn%' ;