検索条件 (Transact-SQL)

適用対象: はいSQL Server (サポートされているすべてのバージョン) はいAzure SQL データベース はいAzure SQL Managed Instance はいAzure Synapse Analytics はいParallel Data Warehouse

論理演算子 AND、OR、および NOT を使用した、1 つ以上の述語の組み合わせです。

トピック リンク アイコン Transact-SQL 構文表記規則

構文

-- 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   
    | 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
2 つの条件を結合し、両方の条件が真の場合に TRUE と評価します。 詳細については、「AND (Transact-SQL)」を参照してください。

OR
2 つの条件を結合し、少なくとも片方の条件が真の場合に TRUE と評価します。 詳細については、「OR (Transact-SQL)」を参照してください。

< predicate >
TRUE、FALSE、または UNKNOWN を返す式です。

式 (expression)
列名、定数、関数、変数、スカラー サブクエリ、または 1 つ以上の演算子やサブクエリで接続された列名、定数、関数の組み合わせです。 expression には CASE 式が含まれる場合もあります。

注意

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

複数のコード ページを処理する場合、コード ページの変換を避けるために、文字定数の先頭に大文字の 'N' を付け、Unicode 変数を使用することができます。

=
2 つの式が等しいことを調べるのに使用する演算子です。

<>
2 つの式が互いに等しくないという条件を調べるのに使用する演算子です。

!=
2 つの式が互いに等しくないという条件を調べるのに使用する演算子です。

>
一方の式がもう一方の式より大きいという条件を調べるのに使用する演算子です。

>=
一方の式がもう一方の式以上であるという条件を調べるのに使用する演算子です。

!>
一方の式がもう一方の式より大きくないという条件を調べるのに使用する演算子です。

<
一方の式がもう一方の式より小さいという条件を調べるのに使用する演算子です。

<=
一方の式がもう一方の式以下であるという条件を調べるのに使用する演算子です。

!<
一方の式がもう一方の式より小さくないという条件を調べるのに使用する演算子です。

string_expression
文字列とワイルドカード文字から成る文字列です。

[ NOT ] LIKE
後続の文字列が、パターン照合で使用されます。 詳細については、「LIKE (Transact-SQL)」を参照してください。

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

[ NOT ] BETWEEN
両端を含む値の範囲を指定します。 最初と最後の値を除外するには、AND を使用します。 詳細については、「BETWEEN (Transact-SQL)」を参照してください。

IS [ NOT ] NULL
指定のキーワードに応じて、NULL 値または NULL 値以外の値の検索を指定します。 ビットごとの演算子や算術演算子を使う式は、オペランドの少なくとも 1 つが NULL であれば、NULL と評価されます。

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
比較演算子およびサブクエリと共に使用します。 サブクエリで取得されたすべての値が比較演算子の要件を満たしている場合は、<predicate> に TRUE を返します。また、少なくとも 1 つの値が比較要件を満たしていない場合、またはサブクエリが外側のステートメントに行を返さなかった場合は、FALSE を返します。 詳細については、「ALL (Transact-SQL)」を参照してください。

{ SOME | ANY }
比較演算子およびサブクエリと共に使用します。 サブクエリで取得された値の少なくとも 1 つが比較演算子の要件を満たしている場合は、<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. WHERE を LIKE および ESCAPE 構文と共に使用する

次の例では、LargePhotoFileName 列に文字列 green_ が含まれている行を検索します。_ がワイルドカード文字であるため、ESCAPE オプションを使用しています。 ESCAPE オプションを指定しないと、単語 green の後に _ 以外の 1 文字が続く文字列を含む description 列の値もクエリで検索してしまいます。

USE AdventureWorks2012 ;  
GO  
SELECT *   
FROM Production.ProductPhoto  
WHERE LargePhotoFileName LIKE '%greena_%' ESCAPE 'a' ;  

B. WHERE および LIKE 構文を UNICODE データと共に使用する

次の例では、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 Analytics、Analytics Platform System (PDW)

C. LIKE を含む WHERE を使用する

次の例では、LastName 列に and という文字列がある行を検索します。

-- Uses AdventureWorks  
  
SELECT EmployeeKey, LastName  
FROM DimEmployee  
WHERE LastName LIKE '%and%';  

D. WHERE および LIKE 構文を UNICODE データと共に使用する

次の例では、WHERE 句を使用して LastName 列の Unicode 検索を実行します。

-- Uses AdventureWorks  
  
SELECT EmployeeKey, LastName  
FROM DimEmployee  
WHERE LastName LIKE N'%and%';  

参照

集計関数 (Transact-SQL)
CASE (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
カーソル (Transact-SQL)
DELETE (Transact-SQL)
式 (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
FROM (Transact-SQL)
演算子 (Transact-SQL)
UPDATE (Transact-SQL)