搜尋條件 (Transact-SQL)
這是使用 AND、OR 和 NOT 邏輯運算子的一個或多個述詞的組合。
適用於:SQL Server (SQL Server 2008 透過目前版本)、Windows Azure 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)>。< 述詞 >
這是傳回 TRUE、FALSE 或 UNKNOWN 的運算式。expression
這是一個資料行名稱、常數、函數、變數、純量子查詢,或任何由一個或多個運算子來連接的資料行名稱、常數和函數之組合,或子查詢。 另外,運算式也可以包含 CASE 運算式。注意
當參考 Unicode 字元資料類型 nchar、nvarchar 和 ntext 時,'expression' 的前面應該要有大寫字母 '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
搜尋包含以字元為基礎的資料之資料行,以進行下列各種比對:單字和片語的精確或較不精確 (模糊) 比對、單字彼此在一定距離之間的接近度,或加權相符。 這個選項只能搭配 SELECT 陳述式使用。 如需詳細資訊,請參閱<CONTAINS (Transact-SQL)>。FREETEXT
提供簡單的自然語言查詢形式,它會搜尋包含以字元為基礎的資料之資料行,以找出符合述詞中之意義 (而不是確實文字) 的值。 這個選項只能搭配 SELECT 陳述式使用。 如需詳細資訊,請參閱<FREETEXT (Transact-SQL)>。[ NOT ] IN
指定根據運算式是否在清單中來搜尋運算式。 搜尋運算式可以是常數或資料行名稱,清單可能是一組常數,也可能是一個子查詢,通常是一個子查詢。 將值的清單括在括號內。 如需詳細資訊,請參閱<IN (Transact-SQL)>。subquery
這可視為一項受到限制的 SELECT 陳述式,類似於 SELECT 陳述式中的 <query_expresssion>。 不允許使用 ORDER BY 子句和 INTO 關鍵字。 如需詳細資訊,請參閱<SELECT (Transact-SQL)>。ALL
用來搭配比較運算子和子查詢使用。 當子查詢的所有擷取的值都滿足比較運算時,便針對 <predicate> 傳回 TRUE,當並非所有值都滿足比較時,或當子查詢未傳回任何資料列給外部陳述式時,便傳回 FALSE。 如需詳細資訊,請參閱<ALL (Transact-SQL)>。{ SOME | ANY }
用來搭配比較運算子和子查詢使用。 當子查詢的任何擷取的值滿足比較運算時,便針對 <predicate> 傳回 TRUE,當子查詢中沒有任何值滿足比較時,或當子查詢未傳回任何資料列給外部陳述式時,便傳回 FALSE。 否則,運算式便是 UNKNOWN。 如需詳細資訊,請參閱<SOME | ANY (Transact-SQL)>。EXISTS
搭配子查詢來測試子查詢傳回的資料列是否存在。 如需詳細資訊,請參閱<EXISTS (Transact-SQL)>。
備註
邏輯運算子的優先順序是 NOT (最高),後面依序接著 AND 和 OR。 您可以利用括號來置換搜尋條件中的這個優先順序。 評估邏輯運算子的順序可能會隨著查詢最佳化工具所進行的選擇而不同。 如需有關邏輯運算子如何處理邏輯值的詳細資訊,請參閱<AND (Transact-SQL)>、<OR (Transact-SQL)>和<NOT (Transact-SQL)>。
範例
A.搭配 LIKE 和 ESCAPE 語法使用 WHERE
下列範例會搜尋 LargePhotoFileName 資料行有 green_ 字元的資料列,且會使用 ESCAPE 選項,因為 _ 是一個萬用字元。 當沒有指定 ESCAPE 選項時,查詢會搜尋任何包含 green 一字,後面再接著 _ 字元以外之任何單一字元描述的值。
USE AdventureWorks2012 ;
GO
SELECT *
FROM Production.ProductPhoto
WHERE LargePhotoFileName LIKE '%greena_%' ESCAPE 'a' ;
B.搭配 Unicode 資料使用 WHERE 和 LIKE 語法
下列範例會利用 WHERE 子句來擷取在美國 (US) 以外,名稱開頭是 Pa 的城巿中,任何公司的郵寄地址。
USE AdventureWorks2012 ;
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%' ;