- カテゴリ:
[ NOT ] IN¶
引数が明示的リストのメンバーの1つであるか、サブクエリの結果であるかをテストします。
注釈
サブクエリ形式では、 IN は = ANY と同等で、 NOT IN は <> ALL と同等です。
Tip
検索最適化サービスを使用すると、この関数を呼び出すクエリのパフォーマンスを向上させることができます。詳細については、 検索最適化サービス をご参照ください。
構文¶
個々の値を比較するには、
行コンストラクター (括弧で囲まれた値のリスト)を比較するには、
値をサブクエリによって返される値と比較するには、
パラメーター¶
value検索する値。
value_A、value_B検索する行コンストラクターの要素。
IN の右側の各値(例えば、
(value3, value4))が、 IN の左側の値(例えば、(value_A, value_B))と同じ要素数を持つようにします。value_#valueを比較する必要がある値。比較する値が行コンストラクターの場合、各
value_#は行コンストラクターの個々の要素です。subqueryvalueと比較できる値のリストを返すサブクエリ。
使用上の注意¶
ほとんどのコンテキストと同様に、 NULL は NULL と同等ではありません。
valueが NULL の場合、リストまたはサブクエリに NULL が含まれているかどうかにかかわらず、関数の戻り値は NULL です。 NULL の使用 を参照してください。構文的には、 IN は関数ではなく演算子として扱われます。この例では、 IN を演算子として使う場合と、
f()を関数として呼び出す場合の違いを示しています。IN では関数構文は使用*できません*。たとえば、前述の例を次のように書き直すことはできません。
IN は、 サブクエリ演算子 とも見なされます。
IN を使用するクエリでは、スプレッド演算子(
**)を使用することで、 配列 を個々の値のリストに展開することができます。詳細情報と例については、 展開演算子 をご参照ください。
照合順序の詳細¶
Arguments with collation specifications currently aren't supported.
例¶
以下の例では、 IN 関数を使用しています。
単純なリテラルでの IN の使用¶
次の例は、単純なリテラルで IN と NOT IN を使用する方法を示しています。
サブクエリでの IN の使用¶
これらの例は、 IN をサブクエリで使用する方法を示しています。
テーブルでの IN の使用¶
これらの例は、テーブルで IN を使用する方法を示しています。以下のステートメントは、例で使用されるテーブルを作成します。
次の例は、テーブルの単一列で IN を使用する方法を示しています。
次の例は、テーブルの複数列で IN を使用する方法を示しています。
次の例は、テーブルの複数列を読み取るサブクエリで IN を使用する方法を示しています。
NULL の使用¶
NULL!=NULL であることに留意してください。 IN と NOT IN リストで、 NULL との比較を含む場合(等号条件を含む)、 NULL が不明な値を表すため、予期せぬ結果が生じる可能性があります。NULL との比較は、 TRUE や FALSE を返さず、 NULL を返します。三項論理 もご参照ください。
例えば、以下のクエリは、 TRUE ではなく NULL を返します。これは、 SQL では、 NULL が別の NULL を含む任意の値と等しいかどうかを判断できないためです。
NULL ではなく、 1 を選択するようにクエリを変更すると、 TRUE が返されることに注意してください。
この場合、 1 が IN リストに一致しているので、結果は TRUE となります。IN リストに NULL も存在するという事実は、結果には影響しません。
同様に、 NULL との NOT IN の比較も、リスト内のいずれかの値が NULL の場合、 NULL を返します。
同じ動作は次のクエリにも当てはまり、 4, 5, NULL の値のセットは、 4, 5, NULL または 7, 8, 9 のどちらにも*一致しません*。
次の例は、 NULL の比較と同じ動作を示しているが、比較される IN リスト値を定義するためにサブクエリを使用しています。