分享方式:


搜尋條件 (Transact-SQL)

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 的 SQL 端點分析 Microsoft Fabric 的倉儲

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

Transact-SQL 語法慣例

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)
    }

注意

若要檢視 SQL Server 2014 (12.x) 和更早版本的 Transact-SQL 語法,請參閱舊版文件

引數

<search_condition>

指定語句、查詢表達式或子查詢結果集中 SELECT 傳回之數據列的條件。 UPDATE針對語句,指定要更新的數據列。 DELETE針對語句,指定要刪除的數據列。 Transact-SQL 語句搜尋條件中可以包含的述詞數目沒有限制。

<graph_search_pattern>

指定圖形搜尋模式。 如需這個子句自變數的詳細資訊,請參閱 MATCH

NOT

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

結合兩個條件,並在兩個條件都為 TRUE時評估TRUE為 。 如需詳細資訊,請參閱 AND

OR

結合兩個條件,並在任一條件為 時評估為 TRUE TRUE。 如需詳細資訊,請參閱 OR

<predicate>

傳回 TRUEFALSEUNKNOWN的表達式。 如需詳細資訊,請參閱 述詞

expression

指定數據行名稱、常數、函式、變數、純量子查詢,或由運算元或子查詢連接之數據行名稱、常數和函式的任何組合。 表達式也可以包含 CASE 表達式。

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

當您使用多個代碼頁時,字元常數可以加上大寫字母 N和 Unicode 變數的前置詞,以避免代碼頁轉換。

= 算子

用來測試兩個表達式之間相等的運算元。

<> 算子

運算子,用來測試兩個表達式的條件不相等。

!= 算子

運算子,用來測試兩個表達式的條件不相等。

> 算子

運算子,用來測試一個表達式的條件大於另一個表達式。

>= 算子

運算子,用來測試一個表達式大於或等於另一個表達式的條件。

!> 算子

運算子,用來測試一個表達式的條件未大於另一個表達式。

< 算子

用來測試一個表達式條件小於另一個表達式的運算符。

<= 算子

運算子,用來測試一個表達式的條件小於或等於另一個表達式。

!< 算子

運算子,用來測試一個表達式的條件不小於另一個表達式。

string_expression

字元和通配符的字串。

[ NOT ] 喜歡

指出要搭配模式比對使用的後續字元字串。 如需詳細資訊,請參閱 LIKE

ESCAPE 'escape_ 字元'

允許在字元字串中搜索萬用字元,而不是當做萬用字元使用。 escape_character 是放在萬用字元前方的字元,用來指出這個特殊用法。

[ NOT ] 之間

指定值的範圍,頭尾包括在內。 用來 AND 分隔開始和結束值。 如需詳細資訊,請參閱 BETWEEN

IS [ NOT ] NULL

根據使用的關鍵詞,指定搜尋 Null 值,或針對非 Null 的值。 如果任一操作數為 ,則具有位或算術運算子的運算運算式會評估 NULLNULL

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

範例

本文 Transact-SQL 程式碼範例使用 AdventureWorks2022AdventureWorksDW2022 範例資料庫,從 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%';