Transact-SQL) (搜尋條件

適用于:SQL Server (Azure SQL Database Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System ( PDW) 的所有支援) 版本

使用邏輯運算子 AND、OR 和 NOT 的一或多個述詞的組合。

Transact-SQL 語法慣例

Syntax

-- Syntax for SQL Server and Azure SQL Database  
  
<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
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse  
  
< 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)
    }

注意

若要檢視 SQL Server 2014 與更早版本的 Transact-SQL 語法,請參閱舊版文件

引數

<search_condition>
指定 SELECT 陳述式、查詢運算式或子查詢結果集中所傳回之資料列的條件。 如果是 UPDATE 陳述式,便指定要更新的資料列。 如果是 DELETE 陳述式,便指定要刪除的資料列。 Transact-SQL 語句搜尋條件中可以包含的述詞數目沒有限制。

<graph_search_pattern>
指定圖形搜尋模式。 如需有關這個子句之引數的詳細資訊,請參閱 MATCH (Transact-SQL)

NOT
執行述詞所指定之布林運算式的否定運算。 如需詳細資訊,請參閱 NOT (Transact-SQL)

AND
組合兩個條件,當兩個條件都是 TRUE 時,便得出 TRUE。 如需詳細資訊,請參閱 AND (Transact-SQL)

OR
組合兩個條件,當任何一個條件是 TRUE 時,便得出 TRUE。 如需詳細資訊,請參閱 OR (Transact-SQL)

< 謂詞 >
這是傳回 TRUE、FALSE 或 UNKNOWN 的運算式。

expression
這是一個資料行名稱、常數、函數、變數、純量子查詢,或任何由一個或多個運算子來連接的資料行名稱、常數和函數之組合,或子查詢。 另外,運算式也可以包含 CASE 運算式。

注意

非 Unicode 字串常數和變數會使用與資料庫預設定序對應的字碼頁。 僅使用非 Unicode 字元資料及參考非 Unicode 字元資料類型 charvarchartext 時,就會進行字碼頁轉換。 SQL Server會將非 Unicode 字串常數和變數轉換成對應至參考資料行定序的字碼頁,或使用 COLLATE 指定的字碼頁,如果該字碼頁與對應至資料庫預設定序的字碼頁不同。 任何在新字碼頁中找不到的字元只要可以找到最相符對應,就會轉譯成類似的字元,否則會轉換成預設的取代字元 "?"。

使用多個字碼頁時,可以在字元常數前面加上大寫字母 'N',以及使用 Unicode 變數,來避免進行字碼頁轉換。

=
這是用來測試兩個運算式是否相等的運算子。

<>
這是用來測試兩個運算式不相等之狀況的運算子。

!=
這是用來測試兩個運算式不相等之狀況的運算子。

>
這是用來測試一個運算式大於另一個運算式之狀況的運算子。

>=
這是用來測試一個運算式大於或等於另一個運算式之狀況的運算子。

!>
這是用來測試一個運算式不大於另一個運算式之狀況的運算子。

<
這是用來測試一個運算式小於另一個運算式之狀況的運算子。

<=
這是用來測試一個運算式小於或等於另一個運算式之狀況的運算子。

!<
這是用來測試一個運算式不小於另一個運算式之狀況的運算子。

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。

IS [ NOT ] DISTINCT FROM
比較兩個運算式的相等,並保證即使一個或兩個運算元都是 Null,也保證為 true 或 false 結果。 如需詳細資訊,請參閱 IS [NOT] DISTINCT FROM (Transact-SQL)

CONTAINS
搜尋包含字元型資料的資料行,以進行下列各種比對:單字和片語的精確或較不精確 (模糊) 比對、單字彼此在一定距離之間的接近度,或加權比對。 這個選項只能搭配 SELECT 陳述式使用。 如需詳細資訊,請參閱 CONTAINS (Transact-SQL)

FREETEXT
提供簡單的自然語言查詢形式,它會搜尋包含以字元為基礎的資料之資料行,以找出符合述詞中之意義 (而不是確實文字) 的值。 這個選項只能搭配 SELECT 陳述式使用。 如需詳細資訊,請參閱 FREETEXT (Transact-SQL)

[ NOT ] IN
指定根據運算式是否在清單中來搜尋運算式。 搜尋運算式可以是常數或資料行名稱,清單可能是一組常數,也可能是一個子查詢,通常是一個子查詢。 將值的清單括在括號內。 如需詳細資訊,請參閱 IN (Transact-SQL)

subquery
可以視為受限制的 SELECT 語句,而且類似于 < SELECT 語句中的query_expression > 。 不允許使用 ORDER BY 子句和 INTO 關鍵字。 如需詳細資訊,請參閱 SELECT (Transact-SQL)

ALL
用來搭配比較運算子和子查詢使用。 當針對子查詢擷取的所有值都滿足比較作業時傳回 TRUE <> ;如果並非所有值都滿足比較,或當子查詢未傳回任何資料列給外部語句時,則傳回 FALSE。 如需詳細資訊,請參閱 ALL (Transact-SQL)

{ SOME | ANY }
用來搭配比較運算子和子查詢使用。 <> 當針對子查詢擷取的任何值符合比較作業時,或當子查詢中沒有任何值滿足比較,或當子查詢中沒有資料列傳回外部語句時,傳回 TRUE。 否則,運算式便是 UNKNOWN。 如需詳細資訊,請參閱 一些|任何 (Transact-SQL)

EXISTS
搭配子查詢來測試子查詢傳回的資料列是否存在。 如需詳細資訊,請參閱 EXISTS (Transact-SQL)

備註

邏輯運算子的優先順序是 NOT (最高),後面依序接著 AND 和 OR。 您可以利用括號來置換搜尋條件中的這個優先順序。 評估邏輯運算子的順序可能會隨著查詢最佳化工具所進行的選擇而不同。 如需邏輯運算子在邏輯值上運作方式的詳細資訊,請參閱 AND (Transact-SQL) OR (Transact-SQL ) 和 NOT (Transact-SQL)

範例

A. 搭配 LIKE 和 ESCAPE 語法使用 WHERE

下列範例會搜尋資料行具有 字元 green_ 的資料列 LargePhotoFileName ,並使用 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%' ;  

範例:Azure Synapse分析和分析平臺系統 (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%';  

另請參閱