Условие поиска (Transact-SQL)
Сочетание одного или нескольких предикатов, в котором используются логические операторы AND, OR и NOT. Параметр <условие_поиска> в инструкции DELETE, MERGE, SELECT или UPDATE указывает, сколько строк возвращается или обрабатывается инструкцией.
Синтаксис
<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 AdventureWorks2008R2 ;
GO
SELECT *
FROM Production.ProductPhoto
WHERE LargePhotoFileName LIKE '%greena_%' ESCAPE 'a' ;
Б. Использование предложения WHERE и синтаксиса LIKE с данными в Юникоде
В следующем примере используется предложение WHERE для отображения всех адресов офисов компаний, находящихся за пределами США (US) и в городах, названия которых начинаются с Pa.
USE AdventureWorks2008R2 ;
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%' ;
См. также