- カテゴリ:
[ NOT ] IN¶
引数が明示的リストのメンバーの1つであるか、サブクエリの結果であるかをテストします。
注釈
サブクエリ形式では、 IN は = ANY と同等で、 NOT IN は <> ALL と同等です。
Tip
検索最適化サービスを使用すると、この関数を呼び出すクエリのパフォーマンスを向上させることができます。詳細については、 検索最適化サービス をご参照ください。
構文¶
個々の値を比較するには、
<value> [ NOT ] IN ( <value_1> [ , <value_2> ... ] ) 行コンストラクター (括弧で囲まれた値のリスト)を比較するには、
( <value_A> [, <value_B> ... ] ) [ NOT ] IN ( ( <value_1> [ , <value_2> ... ] ) [ , ( <value_3> [ , <value_4> ... ] ) ... ] ) 値をサブクエリによって返される値と比較するには、
<value> [ NOT ] IN ( <subquery> ) パラメーター¶
value検索する値。
value_A、value_B検索する行コンストラクターの要素。
IN の右側の各値(例えば、
(value3, value4))が、 IN の左側の値(例えば、(value_A, value_B))と同じ要素数を持つようにします。value_#valueを比較する必要がある値。比較する値が行コンストラクターの場合、各
value_#は行コンストラクターの個々の要素です。subqueryvalueと比較できる値のリストを返すサブクエリ。
使用上の注意¶
ほとんどのコンテキストと同様に、 NULL は NULL と同等ではありません。
valueが NULLの場合、リストまたはサブクエリに NULLが含まれているかどうかにかかわらず、関数の戻り値は NULLです。たとえば、次の場合は TRUE ではなく NULL を返します。
SELECT NULL IN (1, 2, NULL) AS RESULT;
構文的には、 IN は関数ではなく演算子として扱われます。この例では、 IN を演算子として使う場合と、
f()を関数として呼び出す場合の違いを示しています。SELECT f(a, b), x IN (y, z) ...
関数構文を IN で使うことは できません。例えば、先の例を次のように書き換えることはできません。
SELECT f(a, b), IN(x, (y, z)) ...
IN は、 サブクエリ演算子 とも見なされます。
IN を使用するクエリでは、スプレッド演算子(
**)を使用することで、 配列 を個々の値のリストに展開することができます。詳細情報と例については、 展開演算子 をご参照ください。
照合順序の詳細¶
Arguments with collation specifications currently aren't supported.
例¶
以下の例では、 IN 関数を使用しています。
単純なリテラルでの IN の使用¶
次の例は、単純なリテラルで IN と NOT IN を使用する方法を示しています。
SELECT 1 IN (1, 2, 3) AS RESULT; +--------+ | RESULT | |--------| | True | +--------+ SELECT 4 NOT IN (1, 2, 3) AS RESULT; +--------+ | RESULT | |--------| | True | +--------+ サブクエリでの IN の使用¶
これらの例は、 IN をサブクエリで使用する方法を示しています。
SELECT 'a' IN ( SELECT column1 FROM VALUES ('b'), ('c'), ('d') ) AS RESULT; +--------+ | RESULT | |--------| | False | +--------+ テーブルでの IN の使用¶
これらの例は、テーブルで IN を使用する方法を示しています。以下のステートメントは、例で使用されるテーブルを作成します。
CREATE OR REPLACE TABLE in_function_demo ( col_1 INTEGER, col_2 INTEGER, col_3 INTEGER); INSERT INTO in_function_demo (col_1, col_2, col_3) VALUES (1, 1, 1), (1, 2, 3), (4, 5, NULL); 次の例は、テーブルの単一列で IN を使用する方法を示しています。
SELECT col_1, col_2, col_3 FROM in_function_demo WHERE (col_1) IN (1, 10, 100, 1000) ORDER BY col_1, col_2, col_3; +-------+-------+-------+ | COL_1 | COL_2 | COL_3 | |-------+-------+-------| | 1 | 1 | 1 | | 1 | 2 | 3 | +-------+-------+-------+ 次の例は、テーブルの複数列で IN を使用する方法を示しています。
SELECT col_1, col_2, col_3 FROM in_function_demo WHERE (col_1, col_2, col_3) IN ( (1,2,3), (4,5,6)); +-------+-------+-------+ | COL_1 | COL_2 | COL_3 | |-------+-------+-------| | 1 | 2 | 3 | +-------+-------+-------+ 次の例は、テーブルの複数列を読み取るサブクエリで IN を使用する方法を示しています。
SELECT (1, 2, 3) IN ( SELECT col_1, col_2, col_3 FROM in_function_demo ) AS RESULT; +--------+ | RESULT | |--------| | True | +--------+ NULL の使用¶
NULL != NULLです。IN の左側または右側の値に NULL が含まれている場合、次のクエリはいずれも一致を返しません。
SELECT NULL IN (1, 2, NULL) AS RESULT; +--------+ | RESULT | |--------| | NULL | +--------+ SELECT (4, 5, NULL) IN ( (4, 5, NULL), (7, 8, 9) ) AS RESULT; +--------+ | RESULT | |--------| | NULL | +--------+