PostgreSQLのIN
とANY
演算子の違いは何ですか?
両方の動作メカニズムは同じようです。誰もこれを例で説明できますか?
論理的に、 マニュアルを引用 :
IN
は= ANY
と同等です。
ただし、IN
の2つのsyntax variantと、ANY
コンストラクトの2つのvariantがあります。詳細:
IN ()
バリアントsetを取得は、以下に示すように、setを取得する= ANY()
と同等です。
ただし、それぞれの2番目のバリアントはnotと同等ですです。 ANY
構造の2番目のバリアントはarray(実際の配列型である必要があります)を取り、IN
の2番目のバリアントはコンマ区切りの値のリストを取ります。これにより、値の受け渡しにさまざまな制限が生じ、canは特別な場合にさまざまなクエリプランにもつながります。
ANY
構文は、=
だけでなく、さまざまな演算子と組み合わせることができるため、はるかに用途が広くなります。 LIKE
の例:
SELECT 'foo' LIKE ANY('{FOO,bar,%oo%}');
多数の値の場合、setを指定すると、それぞれのスケールが向上します。
関連:
以下の反転:
SELECT * FROM foo WHERE id = ANY (ARRAY[1, 2]);
"id
が配列内のnotである行を検索する"-は次のとおりです。
SELECT * FROM foo WHERE id <> ALL (ARRAY[1, 2]);
これは次と同じです:
SELECT * FROM foo WHERE NOT (id = ANY (ARRAY[1, 2]));
id IS NULL
の行は、これらの式のいずれも渡しません。 NULL
値をさらに含めるには:
SELECT * FROM foo WHERE (id = ANY (ARRAY[1, 2])) IS NOT TRUE;