搜尋條件 (Transact-SQL)
適用於:sql Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Platform System (PDW) SQL 分析端點Microsoft網狀架構 SQL 資料庫中Microsoft網狀架構倉儲Microsoft網狀架構
使用邏輯運算子、 OR
和NOT
的一個或多個述詞AND
的組合。
Syntax
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。
且
結合兩個條件,並在兩個條件都為 TRUE
時評估TRUE
為 。 如需詳細資訊,請參閱 AND。
OR
結合兩個條件,並在任一條件為 時評估為 TRUE
TRUE
。 如需詳細資訊,請參閱 OR。
<predicate>
傳回 TRUE
、 FALSE
或 UNKNOWN
的表達式。 如需詳細資訊,請參閱 述詞。
expression
指定數據行名稱、常數、函式、變數、純量子查詢,或由運算元或子查詢連接之數據行名稱、常數和函式的任何組合。 表達式也可以包含 CASE
表達式。
非 Unicode 字串常數和變數會使用與資料庫預設定序對應的字碼頁。 僅使用非 Unicode 字元資料及參考非 Unicode 字元資料類型 char、varchar 及 text 時,就會進行字碼頁轉換。 如果該代碼頁與對應至資料庫預設定序的代碼頁不同,SQL Server 會將非 Unicode 字串常數和變數轉換成對應至參考數據行的定序或指定的 COLLATE
代碼頁。 如果找到最適合的對應,新代碼頁中找不到的任何字元都會轉譯為類似的字元,否則會轉換成 的預設取代字元?
。
當您使用多個代碼頁時,字元常數可以加上大寫字母 N
和 Unicode 變數的前置詞,以避免代碼頁轉換。
=
算子
用來測試兩個表達式之間相等的運算元。
<>
算子
運算子,用來測試兩個表達式的條件不相等。
!=
算子
運算子,用來測試兩個表達式的條件不相等。
>
算子
運算子,用來測試一個表達式的條件大於另一個表達式。
>=
算子
運算子,用來測試一個表達式大於或等於另一個表達式的條件。
!>
算子
運算子,用來測試一個表達式的條件未大於另一個表達式。
<
算子
用來測試一個表達式條件小於另一個表達式的運算符。
<=
算子
運算子,用來測試一個表達式的條件小於或等於另一個表達式。
!<
算子
運算子,用來測試一個表達式的條件不小於另一個表達式。
string_expression
字元和通配符的字串。
[ NOT ] 喜歡
指出要搭配模式比對使用的後續字元字串。 如需詳細資訊,請參閱 LIKE。
ESCAPE '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
的語句,而且 與 <query_expression>
SELECT
語句類似。 不允許 子 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 Samples 和 Community Projects (Microsoft SQL Server 範例和社群專案)首頁即可下載。
A. 搭配 LIKE 和 ESCAPE 語法使用 WHERE
下列範例會搜尋 LargePhotoFileName
資料行有 green_
字元的資料列,且會使用 ESCAPE
選項,因為 _
是萬用字元。 如果您未指定 ESCAPE
選項,查詢會搜尋包含文字 green
的任何描述值,後面接著字元以外的 _
任何單一字元。
USE AdventureWorks2022;
GO
SELECT *
FROM Production.ProductPhoto
WHERE LargePhotoFileName LIKE '%greena_%' ESCAPE 'a';
B. 搭配 Unicode 資料使用 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 和 Analytics Platform System (PDW)
C. 搭配 LIKE 使用 WHERE
下列範例會搜尋 LastName
資料行有 and
字元的資料列。
-- Uses AdventureWorks
SELECT EmployeeKey,
LastName
FROM DimEmployee
WHERE LastName LIKE '%and%';
D. 搭配 Unicode 資料使用 WHERE 和 LIKE 語法
下列範例會使用 WHERE
子句,以在 LastName
資料行上執行 Unicode 搜尋。
-- Uses AdventureWorks
SELECT EmployeeKey,
LastName
FROM DimEmployee
WHERE LastName LIKE N'%and%';