翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
IN 条件
An IN 条件は、一連の値またはサブクエリのメンバーシップの値をテストします。
構文
expression [ NOT ] IN (expr_list | table_subquery)
引数
- expression
-
expr_list または table_subquery に対して評価される数値、文字、または日時であり、当該リストまたはサブクエリのデータ型との互換性が必要です。
- expr_list
-
1 つまたは複数のカンマ区切り式、あるいは括弧で囲まれたカンマ区切り式の 1 つまたは複数のセット。
- table_subquery
-
評価結果として 1 つまたは複数の行を持つテーブルを返すサブクエリですが、その選択リスト内の列数は 1 個に制限されています。
- IN | NOT IN
-
IN は、式が式リストまたはクエリのメンバーである場合に true を返します。 NOTIN は、式がメンバーでない場合に true を返します。IN NULLと NOT IN は戻り、次の場合は行が返されません。式が null を生成する場合、または一致する expr_list 値または table_subquery 値がなく、これらの比較行の少なくとも 1 つが null を生成する場合。
例
次の条件は、リストされた値の場合にのみ true を返します。
qtysold in (2, 4, 5) date.day in ('Mon', 'Tues') date.month not in ('Oct', 'Nov', 'Dec')
大規模 IN リストの最適化
クエリのパフォーマンスを最適化するために、10 個を超える値が含まれる IN リストは内部的にスカラー配列として評価されます。10 個未満の値が含まれる IN リストは一連の OR 述語として評価されます。この最適化は、SMALLINT、、INTEGER、BIGINT、REAL、DOUBLEPRECISION、BOOLEAN、、CHARVARCHAR、DATETIMESTAMP、および TIMESTAMPTZ データ型でサポートされています。
クエリのEXPLAIN出力を見て、この最適化の効果を確認します。以下に例を示します。
explain select * from sales QUERY PLAN -------------------------------------------------------------------- XN Seq Scan on sales (cost=0.00..6035.96 rows=86228 width=53) Filter: (salesid = ANY ('{1,2,3,4,5,6,7,8,9,10,11}'::integer[])) (2 rows)