ホームページ >データベース >mysql チュートリアル >PostgreSQL の IN と ANY: 主な違いは何ですか? それぞれをいつ使用する必要がありますか?

PostgreSQL の IN と ANY: 主な違いは何ですか? それぞれをいつ使用する必要がありますか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-19 11:32:11375ブラウズ

PostgreSQL における IN と ANY の主な違いと使用シナリオ

IN vs. ANY in PostgreSQL: What are the Key Differences and When Should I Use Each?

IN 構造と ANY 構造を理解する

PostgreSQL では、IN と ANY は両方とも、セットの比較を実行してセット内に値が存在するかどうかを判断する構造です。

論理的等価性

論理的には、IN は = ANY と同等です。ただし、それらの構文と機能は異なります。

文法のバリエーション

IN と ANY にはそれぞれ、次の 2 つの構文バリアントがあります:

  • IN は、値の配列またはカンマ区切りの値のリストを受け入れます。
  • ANY は、値のセットまたは値の配列を受け入れます。

機能の違い

  1. 渡される値: IN はコレクションまたは値のリストを期待しますが、ANY は配列 (実際の配列タイプ) を期待します。
  2. インデックスの使用法: コレクションの IN ではインデックスを使用できますが、配列の ANY ではインデックスを使用できない場合があります。
  3. クエリ プラン: IN と ANY は、特定の状況下で異なるクエリ プランを生成します。

いずれかの利点

ANY は、= を含むさまざまな演算子と組み合わせることができるため、柔軟性が高くなります。例:

<code class="language-sql">SELECT 'foo' LIKE ANY('{FOO,bar,%oo%}');</code>

規模とパフォーマンス

値が大きい場合、IN と ANY の両方にセットを使用するとパフォーマンスが向上する可能性があります。

反転して除外

指定された配列に値が含まれていない行を検索するには:

<code class="language-sql">SELECT * FROM tbl WHERE id <> ALL (ARRAY[1, 2]);</code>

上記のコード ブロック内の式はすべて同等であり、ID 値 1 と 2 を持つ行は除外されます。

NULL 値の包含

デフォルトでは、ID NULL の行は除外されます。それらを含めるには、次の式を使用します:

<code class="language-sql">SELECT * FROM tbl WHERE (id = ANY ('{1, 2}')) IS NOT TRUE;</code>

以上がPostgreSQL の IN と ANY: 主な違いは何ですか? それぞれをいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。