搜索条件 (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 函数。

=

用于测试两个表达式是否相等的运算符。

<>

是用于测试两个表达式彼此不相等的条件的运算符。

!=

是用于测试两个表达式彼此不相等的条件的运算符。

>

用于测试一个表达式是否大于另一个表达式的运算符。

>=

用于测试一个表达式是否大于或等于另一个表达式的运算符。

!>

用于测试一个表达式是否不大于另一个表达式的运算符。

<

用于测试一个表达式是否小于另一个表达式的运算符。

<=

用于测试一个表达式是否小于或等于另一个表达式的运算符。

!<

用于测试一个表达式是否不小于另一个表达式的运算符。

string_expression

字符串和通配符。

[NOT] LIKE

指示后续字符串使用时要进行模式匹配。有关详细信息,请参阅 LIKE (Transact-SQL)

ESCAPE 'escape_ character'

允许在字符串中搜索通配符,而不是将其作为通配符使用。escape_character 是放在通配符前表示此特殊用法的字符。

[ NOT ] BETWEEN

指定值的包含范围。使用 AND 分隔开始值和结束值。有关详细信息,请参阅 BETWEEN (Transact-SQL)

IS [NOT] NULL

根据使用的关键字,指定是否搜索空值或非空值。如果有任何一个操作数为 NULL,则包含位运算符或算术运算符的表达式的计算结果为 NULL。

CONTAINS

在包含字符数据的列中,搜索单个词和短语的精确或不精确(“模糊**”)的匹配项、在一定范围内相同的近似词以及加权匹配项。此选项只能与 SELECT 语句一起使用。有关详细信息,请参阅 CONTAINS (Transact-SQL)

FREETEXT

在包含字符数据的列中,搜索与谓词中的词的含义相符而非精确匹配的值,提供一种形式简单的自然语言查询。此选项只能与 SELECT 语句一起使用。有关详细信息,请参阅 FREETEXT (Transact-SQL)

[ NOT ] IN

根据是在列表中包含还是排除某表达式,指定对该表达式的搜索。搜索表达式可以是常量或列名,而列表可以是一组常量,更常用的是子查询。将一组值用圆括号括起来。有关详细信息,请参阅 IN (Transact-SQL)

subquery

可以看成是受限的 SELECT 语句,与 SELECT 语句中的 <query_expresssion> 相似。不允许使用 ORDER BY 子句、COMPUTE 子句和 INTO 关键字。有关详细信息,请参阅 SELECT (Transact-SQL)

ALL

与比较运算符和子查询一起使用。如果子查询检索的所有值都满足比较运算,则为 <predicate> 返回 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)

示例

A. 在 WHERE 中使用 LIKE 和 ESCAPE 语法

以下示例将搜索以下行,其中的 LargePhotoFileName 列包含字符 green_;由于 _ 是通配符,因此使用了 ESCAPE 选项。如果不指定 ESCAPE 选项,则查询搜索到的说明值中,将包含后跟一个非 _ 字符的 green 一词。

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

B. 对 Unicode 数据使用 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%' ;

请参阅

参考

聚合函数 (Transact-SQL)
CASE (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
游标 (Transact-SQL)
DELETE (Transact-SQL)
表达式(Transact-SQL)
FREETEXTTABLE (Transact-SQL)
FROM (Transact-SQL)
运算符 (Transact-SQL)
UPDATE (Transact-SQL)

其他资源

使用全文搜索查询 SQL Server
逻辑运算符

帮助和信息

获取 SQL Server 2005 帮助