検索条件 (Transact-SQL)

論理演算子 AND、OR、および NOT を使用した、1 つ以上の述語の組み合わせです。DELETE、MERGE、SELECT、または UPDATE ステートメントで <search_condition> を使用すると、ステートメントによって返される行やステートメントの影響を受ける行を指定できます。

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

構文

        <search_condition> ::= 
    { [ NOT ] <predicate> | ( <search_condition> ) } 
    [ { AND | OR } [ NOT ] { <predicate> | ( <search_condition> ) } ] 
[ ,...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)     } 

引数

  • <search_condition>
    SELECT ステートメント、クエリ式、またはサブクエリの場合、結果セットに返す行の条件を指定します。UPDATE ステートメントの場合、更新する行を指定します。DELETE ステートメントの場合、削除する行を指定します。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 文字データ型 nchar、nvarchar、および ntext を参照している場合は、"expression" の前に大文字の "N" を付ける必要があります。"N" を指定しないと、SQL Server では、文字列はデータベースまたは列の既定の照合順序に対応するコード ページに変換されます。文字列がこのコード ページにない場合は、失われます。

  • =
    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_expresssion> に似ています。ORDER BY 句、COMPUTE 句、および 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 AdventureWorks2008R2 ;
GO
SELECT * 
FROM Production.ProductPhoto
WHERE LargePhotoFileName LIKE '%greena_%' ESCAPE 'a' ;

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

次の例では、WHERE 句を使用し、米国 (US) 国外を対象として、名前が Pa で始まる都市にあるすべての企業の住所を取得します。

USE AdventureWorks2008R2 ;
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%' ;