Поделиться через


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

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечной точке аналитики платформы Аналитики Azure Synapse Analytics (PDW) в Microsoft Fabric Хранилище в 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)

C. Использование 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%';