搜索条件 (Transact-SQL)
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 中的 SQL 终结点 Microsoft Fabric 中的仓库 Microsoft Fabric SQL 数据库
一个或多个使用逻辑运算符 AND
的谓词的组合, OR
以及 NOT
。
语法
SQL Server、Azure SQL 数据库和Azure SQL 托管实例的语法。
<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
对谓词指定的布尔表达式求反。 有关详细信息,请参阅 NOT。
AND
将两个条件组合在一起,并计算结果TRUE
为两个条件。TRUE
有关详细信息,请参阅 AND。
OR
合并两个条件,并在任一条件为时计算 TRUE
结果 TRUE
。 有关详细信息,请参阅 OR。
<predicate>
返回TRUE
或FALSE
UNKNOWN
返回的表达式。 有关详细信息,请参阅 Predicates。
expression
指定列名、常量、函数、变量、标量子查询或由运算符或子查询连接的列名、常量和函数的任意组合。 表达式还可以包含 CASE
表达式。
非 Unicode 字符串常量和变量使用与数据库的默认排序规则相对应的代码页。 仅使用非 Unicode 字符数据并引用 char、varchar 和 text 类型的非 Unicode 字符数据时,可能发生代码页转换 。 如果代码页不同于与数据库的默认排序规则对应的代码页,SQL Server 会将非 Unicode 字符串常量和变量转换为与引用列的排序规则相对应的代码页或指定的 COLLATE
代码页。 如果 找到最适合映射 ,或者转换为默认替换字符,则新代码页中未找到的任何字符都将转换为类似的字符 ?
。
使用多个代码页时,字符常量可以带有大写字母 N
前缀,并且可以使用 Unicode 变量来避免代码页转换。
=
运算符
用于测试两个表达式之间的相等性的运算符。
<>
运算符
用于测试两个表达式不相等条件的运算符。
!=
运算符
用于测试两个表达式不相等条件的运算符。
>
运算符
用于测试一个表达式大于另一个表达式的条件的运算符。
>=
运算符
用于测试一个表达式大于或等于另一个表达式的条件的运算符。
!>
运算符
用于测试一个表达式的条件的运算符不大于另一个表达式。
<
运算符
用于测试一个表达式的条件小于另一个表达式的运算符。
<=
运算符
用于测试一个表达式小于或等于另一个表达式的条件的运算符。
!<
运算符
用于测试一个表达式的条件的运算符不小于另一个表达式。
string_expression
字符字符串和通配符。
[ NOT ] 喜欢
指示后续字符串使用时要进行模式匹配。 有关详细信息,请参阅 LIKE。
转义“escape_字符”
允许在字符串中搜索通配符,而不是将其作为通配符使用。 escape_character 是放在通配符前表示此特殊用法的字符。
[ NOT ] 之间
指定值的包含范围。 用于 AND
分隔起始值和结束值。 有关详细信息,请参阅 BETWEEN。
IS [ NOT ] NULL
根据使用的关键字,指定搜索 null 值或不为 null 的值。 具有按位或算术运算符的表达式的计算结果为 NULL
任一操作数 NULL
。
IS [ NOT ] DISTINCT FROM
比较两个表达式的相等性,并保证一个 true 或 false 结果,即使有一个或两个操作数。NULL
有关详细信息,请参阅 IS [NOT] DISTINCT FROM (Transact-SQL)。
CONTAINS
在包含基于字符的数据的列中,搜索单个词和短语的精确或不精确(“模糊”)匹配项、在一定范围内相同的近似词以及加权匹配项。 此选项只能与语句一起使用 SELECT
。 有关详细信息,请参阅 CONTAINS。
FREETEXT
在包含基于字符的数据的列中,搜索与谓词中的词的含义相符而非精确匹配的值,从而提供一种形式简单的自然语言查询。 此选项只能与语句一起使用 SELECT
。 有关详细信息,请参阅 FREETEXT。
[ NOT ] IN
根据是在列表中包含还是排除某表达式,指定对该表达式的搜索。 搜索表达式可以是常量或列名,而列表可以是一组常量,更常用的是子查询。 将一组值用圆括号括起来。 有关详细信息,请参阅 IN。
subquery
可以被视为受限SELECT
语句,并且与语句SELECT
中类似<query_expression>
。 不允许子 ORDER BY
句和 INTO
关键字。 有关详细信息,请参阅 SELECT。
ALL
与比较运算符和子查询一起使用。 当TRUE
<predicate>
为子查询检索到的所有值满足比较操作时,或者并非所有值都满足比较,或者FALSE
当子查询不向外部语句返回任何行时,返回结果。 有关详细信息,请参阅 ALL。
{ SOME | ANY }
与比较运算符和子查询一起使用。 TRUE
当<predicate>
为子查询检索到的任何值满足比较操作时,或者当子查询中没有值满足比较时,或者FALSE
当子查询中没有向外部语句返回任何行时,则返回该值。 否则,表达式为 UNKNOWN
. 有关详细信息,请参阅 SOME |ANY。
EXISTS
与子查询一起使用,用于测试是否存在子查询返回的行。 有关详细信息,请参阅 EXISTS。
注解
逻辑运算符的优先顺序是 NOT
(最高),然后是 AND
,最后是 OR
。 不过,可以在搜索条件内使用括号来表示优于此优先顺序的运算符。 根据查询优化器所做的选择,逻辑运算符的求值顺序可能有所不同。 有关逻辑运算符如何对逻辑值进行操作的详细信息,请参阅 AND、 OR 和 NOT。
示例
本文中的 Transact-SQL 代码示例使用 AdventureWorks2022
或 AdventureWorksDW2022
示例数据库,可从 Microsoft SQL Server 示例和社区项目主页下载它。
A. 将 WHERE 与 LIKE 和 ESCAPE 语法配合使用
下面的示例将搜索以下行,其中的 LargePhotoFileName
列包含字符 green_
;由于 _
是通配符,因此使用了 ESCAPE
选项。 如果未指定 ESCAPE
该选项,查询将搜索包含单词 green
后跟字符以外的任何单个字符 _
的任何说明值。
USE AdventureWorks2022;
GO
SELECT *
FROM Production.ProductPhoto
WHERE LargePhotoFileName LIKE '%greena_%' ESCAPE 'a';
B. 将 WHERE 和 LIKE 语法与 Unicode 数据配合使用
下面的示例将使用 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 和 Analytics Platform System (PDW)
°C 将 WHERE 与 LIKE 配合使用
下面的示例将搜索以下行,其中的 LastName
列包含字符 and
。
-- Uses AdventureWorks
SELECT EmployeeKey,
LastName
FROM DimEmployee
WHERE LastName LIKE '%and%';
D. 将 WHERE 和 LIKE 语法与 Unicode 数据配合使用
下面的示例使用 WHERE
子句对 LastName
列执行 Unicode 搜索。
-- Uses AdventureWorks
SELECT EmployeeKey,
LastName
FROM DimEmployee
WHERE LastName LIKE N'%and%';