是使用邏輯運(yùn)算符 AND、OR 和 NOT 的一個(gè)或更多謂詞的組合。
語法
< search_condition > ::=
{ [ NOT ] < predicate > | ( < searth_condition > ) }
[ { AND | OR } [ NOT ] { < predicate > |( < searth_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 )
}
參數(shù)
<search_condition>
指定 SELECT 語句、查詢表達(dá)式或子查詢的結(jié)果集內(nèi)所返回的行的條件。對(duì)于 UPDATE 語句,指定要更新的行。對(duì)于 DELETE 語句,指定要?jiǎng)h除的行。對(duì) Transact-SQL 語句搜索條件中可以包含的謂詞數(shù)量沒有限制。
- NOT
- 對(duì)由謂詞指定的布爾表達(dá)式求反。有關(guān)更多信息,請(qǐng)參見 NOT。
- AND
- 組合兩個(gè)條件并在兩個(gè)條件都是 TRUE 時(shí)取值為 TRUE。有關(guān)更多信息,請(qǐng)參見 AND。
- OR
- 組合兩個(gè)條件并在任何一個(gè)條件是 TRUE 時(shí)取值為 TRUE。有關(guān)更多信息,請(qǐng)參見 OR。
< predicate >
是返回 TRUE、FALSE 或 UNKNOWN 的表達(dá)式。
- expression
- 是列名、常量、函數(shù)、變量、標(biāo)量子查詢,或者是由運(yùn)算符或子查詢連接的列名、常量和函數(shù)的任意組合。該表達(dá)式還可以包含 CASE 函數(shù)。
- =
- 是用于測(cè)試兩個(gè)表達(dá)式是否相等的運(yùn)算符。
- <>
- 是用于測(cè)試兩個(gè)表達(dá)式彼此不相等的條件的運(yùn)算符。
- !=
- 是用于測(cè)試兩個(gè)表達(dá)式彼此不相等的條件的運(yùn)算符。
- >
- 是用于測(cè)試一個(gè)表達(dá)式大于另一個(gè)的條件的運(yùn)算符。
- >=
- 是用于測(cè)試一個(gè)表達(dá)式大于或等于另一個(gè)的條件的運(yùn)算符。
- !>
- 是用于測(cè)試一個(gè)表達(dá)式不大于另一個(gè)的條件的運(yùn)算符。
- <
- 是用于測(cè)試一個(gè)表達(dá)式小于另一個(gè)的條件的運(yùn)算符。
- <=
- 是用于測(cè)試一個(gè)表達(dá)式小于或等于另一個(gè)的條件的運(yùn)算符。
- !<
- 是用于測(cè)試一個(gè)表達(dá)式不小于另一個(gè)的條件的運(yùn)算符。
- string_expression
- 是字符串和通配符。
- [NOT] LIKE
- 表示對(duì)后續(xù)字符串使用模式匹配。有關(guān)更多信息,請(qǐng)參見 LIKE。
- ESCAPE 'escape_character'
- 允許在字符串中搜索通配符而不是將其作為通配符使用。escape_character 是放在通配符前表示此特殊用途的字符。
- [ NOT ] BETWEEN
- 指定值的包含范圍。使用 AND 將開始值和結(jié)束值分開。有關(guān)更多信息,請(qǐng)參見 BETWEEN。
- IS [NOT] NULL
- 根據(jù)所使用的關(guān)鍵字指定對(duì)空值或非空值的搜索。如果有任何操作數(shù)是 NULL,帶位運(yùn)算符或算術(shù)運(yùn)算符的表達(dá)式將取值為 NULL。
- CONTAINS
- 在包含基于字符的數(shù)據(jù)的列中,搜索單個(gè)詞和短語的精確或"模糊"(不精確)匹配項(xiàng)、一定間距內(nèi)的近似詞以及加權(quán)匹配項(xiàng)。只能與 SELECT 語句一起使用。有關(guān)更多信息,請(qǐng)參見 CONTAINS。
- FREETEXT
- 通過在包含基于字符的數(shù)據(jù)的列中,搜索與含義而不是謂詞中的精確詞相匹配的值,提供簡(jiǎn)單形式的自然語言查詢。只能與 SELECT 語句一起使用。有關(guān)更多信息,請(qǐng)參見 FREETEXT。
- [ NOT ] IN
- 根據(jù)表達(dá)式是包含在列表內(nèi)還是排除在列表外,指定對(duì)表達(dá)式的搜索。搜索表達(dá)式可以是常量或列名,而列表可以是一組常量或更多情況下是子查詢。將值列表放在圓括號(hào)內(nèi)。有關(guān)更多信息,請(qǐng)參見 IN。
- subquery
- 可被看成是受限 SELECT 語句且與 SELECT 語句中的 <query_expresssion> 相似。不允許使用 ORDER BY 子句、COMPUTE 子句和 INTO 關(guān)鍵字。有關(guān)更多信息,請(qǐng)參見 SELECT。
- ALL
- 與比較運(yùn)算符和子查詢一起使用。如果子查詢檢索的所有值滿足比較運(yùn)算,將給 <predicate> 返回 TRUE,或者如果不是所有值都滿足比較運(yùn)算或子查詢沒有給外部語句返回行,則返回 FALSE。有關(guān)更多信息,請(qǐng)參見 ALL。
- { SOME | ANY }
- 與比較運(yùn)算符和子查詢一起使用。如果子查詢檢索的任何值都滿足比較運(yùn)算,將給 <predicate> 返回 TRUE,或者如果子查詢內(nèi)沒有值滿足比較運(yùn)算或子查詢沒有給外部語句返回行,則返回 FALSE。否則,表達(dá)式是未知的。有關(guān)更多信息,請(qǐng)參見 SOME | ANY。
- EXISTS
- 與子查詢一起使用,測(cè)試由子查詢返回的行是否存在。有關(guān)更多信息,請(qǐng)參見 EXISTS。
注釋
邏輯運(yùn)算符的優(yōu)先順序是 NOT(最高),接著是 AND,最后是 OR。同一優(yōu)先級(jí)上的取值順序是從左到右。在搜索條件內(nèi),可使用圓括號(hào)替代此順序。有關(guān)邏輯運(yùn)算符如何在真實(shí)值上運(yùn)算的更多信息,請(qǐng)參見 AND、OR 和 NOT。
示例
A. 在 WHERE 中使用 LIKE 和 ESCAPE 語法
下例假定 description 列存在于 finances 表內(nèi)。若要搜索其中的 description 列包含精確字符 g_ 的行,請(qǐng)使用 ESCAPE 選項(xiàng),因?yàn)?_ 是通配符。如果不指定 ESCAPE 選項(xiàng),查詢將搜索任何包含字母 g 后跟除 _ 字符外的任何單個(gè)字符的描述值。
SELECT *
FROM finances
WHERE description LIKE 'gs_' ESCAPE 'S'
GO
B. 對(duì) Unicode 數(shù)據(jù)使用 WHERE 和 LIKE 語法
下例使用 WHERE 子句檢索公司名稱末尾包含字符串 snabbköp 的公司的聯(lián)系人姓名、電話和傳真號(hào)碼。
USE Northwind
SELECT CompanyName, ContactName, Phone, Fax
FROM Customers
WHERE CompanyName LIKE N'%snabbk
öp'
ORDER BY CompanyName ASC, ContactName ASC