検索条件 (Transact-SQL)

Applies to: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric の SQL 分析エンドポイント Microsoft Fabric のウェアハウス

論理演算子 ANDOR、および NOTを使用する 1 つ以上の述語の組み合わせ。

Transact-SQL 構文表記規則

構文

SQL Server、Azure SQL Database、および Azure SQL Managed Instance の構文。

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

引数

<search_condition>

SELECT ステートメント、クエリ式、またはサブクエリの結果セットで返される行の条件を指定します。 UPDATE ステートメントの場合は、更新する行を指定します。 DELETE ステートメントの場合は、削除する行を指定します。 Transact-SQL ステートメントの検索条件に含めることができる述語の数に制限はありません。

<graph_search_pattern>

グラフの一致パターンを指定します。 この句の引数の詳細については、「 MATCH」を参照してください。

NOT

述語によって指定されたブール式を否定します。 詳細については、「 NOT」を参照してください。

かつ

2 つの条件を結合し、両方の条件がTRUEされたときにTRUEに評価されます。 詳細については、「 AND」を参照してください。

OR

2 つの条件を結合し、いずれかの条件がTRUEされたときにTRUEに評価されます。 詳細については、「 OR」を参照してください。

<predicate>

TRUEFALSE、またはUNKNOWNを返す式。 詳細については、述語を参照してください。

式 (expression)

列名、定数、関数、変数、スカラー サブクエリ、または演算子または演算子、またはサブクエリによって接続される列名、定数、関数の任意の組み合わせを指定します。 式には、 CASE 式を含めることもできます。

Unicode ではない文字列定数と変数は、データベースの既定の照合順序に対応するコード ページを使用します。 コード ページの変換は、Unicode 以外の文字データのみで作業し、Unicode ではない文字データ型 charvarchar、および text を参照する場合に発生する可能性があります。 SQL Server は、Unicode 以外の文字列定数と変数を、参照先の列の照合順序に対応するコード ページに変換するか、 COLLATEを使用して指定します(そのコード ページがデータベースの既定の照合順序に対応するコード ページと異なる場合)。 新しいコード ページに見つからない文字は、 最適なマッピングが見つかった場合 、または ?の既定の置換文字に変換された場合は、同様の文字に変換されます。

複数のコード ページを操作する場合は、文字定数の先頭に大文字の Nを付けることができ、Unicode 変数を使用してコード ページの変換を回避できます。

= 演算子

2 つの式間の等価性をテストするために使用される演算子。

<> 演算子

2 つの式が互いに等しくない条件をテストするために使用される演算子。

!= 演算子

2 つの式が互いに等しくない条件をテストするために使用される演算子。

> 演算子

1 つの式が他方より大きい条件をテストするために使用される演算子。

>= 演算子

1 つの式がもう一方の式以上の条件をテストするために使用される演算子。

!> 演算子

1 つの式が他の式より大きくない条件をテストするために使用される演算子。

< 演算子

1 つの式の条件が他の式より小さいことをテストするために使用される演算子。

<= 演算子

1 つの式がもう一方の式以下の条件をテストするために使用される演算子。

!< 演算子

1 つの式の条件が他の式より小さくないテストに使用される演算子。

string_expression

文字とワイルドカード文字の文字列。

[ NOT ] という感じで

後続の文字列が、パターン照合で使用されます。 詳細については、 LIKE を参照してください。

ESCAPE 'escape_ 文字'

ワイルドカードとして機能するのではなく、ワイルドカード文字そのものを文字列内で検索できます。 escape_character は、ワイルドカード文字の前に付けてこの特別な使用方法を示す文字です。

[ NOT ]

両端を含む値の範囲を指定します。 ANDを使用して、開始値と終了値を区切ります。 詳細については、「 BETWEEN」を参照してください。

IS [ NOT ] NULL

使用するキーワードに応じて、null 値の検索、または null ではない値の検索を指定します。 ビットごとの演算子または算術演算子を持つ式は、オペランドのいずれかがNULL場合にNULL評価されます。

IS [ NOT ] DISTINCT FROM

2 つの式の等価性を比較し、一方または両方のオペランドが NULLされている場合でも、true または false の結果を保証します。 詳細については、「IS [NOT] DISTINCT FROM (Transact-SQL)」を参照してください。

CONTAINS

文字ベースのデータを含む列に対して、単語または語句との完全一致検索またはあいまい (あいまい一致) 検索、特定の範囲内での近接検索、および重み付き検索を行います。 このオプションは、 SELECT ステートメントでのみ使用できます。 詳細については、 CONTAINS を参照してください。

FREETEXT

文字ベースのデータを含む列で、述語内の文字の並びと正確に一致しなくても意味が合っている値を検索するための、単純形式の自然言語クエリを指定します。 このオプションは、 SELECT ステートメントでのみ使用できます。 詳細については、「 FREETEXT」を参照してください。

[ NOT ] IN

式がリストに含まれているかどうかに基づいて、式の検索を指定します。 検索式には定数または列名を指定できます。またリストには、一般的にはサブクエリが指定されますが、一連の定数も指定できます。 値のリストはかっこで囲んでください。 詳細については、「 IN」を参照してください。

subquery

制限付きのSELECTステートメントと見なすことができます。これは、SELECT ステートメントの<query_expression>に似ています。 ORDER BY句と INTO キーワードは使用できません。 詳細については、 SELECT を参照してください。

ALL

比較演算子およびサブクエリと共に使用します。 サブクエリに対して取得されたすべての値が比較操作を満たす場合、またはすべての値が比較を満たしていない場合、またはサブクエリが外側のステートメントに行を返さない場合にFALSE<predicate>TRUEを返します。 詳細については、「 ALL」を参照してください。

{ SOME | ANY }

比較演算子およびサブクエリと共に使用します。 サブクエリに対して取得された値が比較操作を満たす場合、またはサブクエリの値が比較を満たしていない場合、またはサブクエリが外側のステートメントに行を返さない場合にFALSE<predicate>TRUEを返します。 それ以外の場合、式は UNKNOWN。 詳細については、「 SOME |ANY

EXISTS

サブクエリと共に使用され、サブクエリによって返される行が存在するかどうかを調べます。 詳細については、「 EXISTS」を参照してください。

解説

論理演算子の優先順位は、高い方から NOTANDOR です。 かっこを使用することによって、検索条件におけるこれらの優先順位をオーバーライドすることができます。 論理演算子の評価順序は、クエリ オプティマイザーが行う選択によって異なる場合があります。 論理演算子がロジック値に対してどのように動作するかの詳細については、「 ANDOR、および NOTを参照してください。

この記事の Transact-SQL コード サンプルは AdventureWorks2022 または AdventureWorksDW2022 サンプル データベースを使用します。このサンプル データベースは、Microsoft SQL Server サンプルとコミュニティ プロジェクトのホーム ページからダウンロードできます。

A. LIKE 構文と ESCAPE 構文で WHERE を使用する

次の例では、LargePhotoFileName 列に文字列 green_ が含まれている行を検索します。_ がワイルドカード文字であるため、ESCAPE オプションを使用しています。 ESCAPE オプションを指定しない場合、クエリは、_文字以外の 1 文字の後に続く単語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%';