ホームページ >データベース >mysql チュートリアル >PostgreSQL における IN と ANY: 各演算子をいつ使用する必要がありますか?
PostgreSQL IN
と ANY
演算子: 詳細な比較
PostgreSQL は、列の値を一連の値と比較するための IN
演算子と ANY
演算子の両方を提供します。機能的には似ていますが、クエリのパフォーマンスと柔軟性に影響を与える重要な違いが存在します。
機能的等価
基本的に、IN
は = ANY
と同等です。 どちらも、列の値が定義されたセット内のいずれかの値と一致するかどうかをチェックします。 例:
<code class="language-sql">SELECT * FROM my_table WHERE id IN (1, 2, 3); SELECT * FROM my_table WHERE id = ANY ('{1, 2, 3}');</code>
これらのクエリは同じ結果を返します。
構文のバリエーション
両方の演算子には異なる構文があります:
IN (set)
: 値のカンマ区切りリストを括弧で囲みます。
<code class="language-sql"> SELECT * FROM my_table WHERE id IN (1, 2, 3);</code>
ANY (set)
: 中括弧を使用して値のセット (通常は配列) をカプセル化します。
<code class="language-sql"> SELECT * FROM my_table WHERE id = ANY ('{1, 2, 3}');</code>
データ型の処理: 配列とリスト
決定的な違いは、入力の処理方法にあります。
IN
はカンマ区切りのリストを受け入れますが、データ型が混在する可能性があります。ANY
は配列を想定しており、事前定義されたデータ型が必要です。この違いは、パフォーマンスとデータ型の制約に影響を与える可能性があります。
ANY
の汎用性の向上
ANY
は汎用性においてIN
を上回ります。 =
を超えるさまざまな演算子と組み合わせます。例:
<code class="language-sql">SELECT * FROM my_table WHERE name LIKE ANY ('{John, Mary, Joe}');</code>
パフォーマンスの側面
広範な値セットの場合、配列を使用した ANY
は、コンマ区切りリストを使用した IN
よりも優れたスケーラビリティを示します。
否定と除外
列値がセット内にある行を除外するには:
IN
: NOT IN (1, 2, 3)
ANY
: id <> ALL ('{1, 2, 3}')
除外対象の NULL
値を処理するには慎重な考慮が必要であり、多くの場合、明示的な IS NOT TRUE
チェックが必要になります。
<code class="language-sql">SELECT * FROM my_table WHERE (id = ANY ('{1, 2, 3}')) IS NOT TRUE;</code>
以上がPostgreSQL における IN と ANY: 各演算子をいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。