比較演算子

PostgreSQL 9.1.1文書
前のページ | 巻戻し | 第 9章関数と演算子 | 早送り | 次のページ

# 9.2. 比較演算子

表9-1に示す、通常の比較演算子は使用可能です。

表 9-1. 比較演算子

演算子 | 説明
--- | ---
`<` | 小なり
`>` | 大なり
`<=` | 等しいかそれ以下
`>=` | 等しいかそれ以上
`=` | 等しい
`<>` または `!=` | 等しくない

> 注意: `!=`演算子は構文解析で`<>`に変換されます。`!=`演算子と`<>`演算子に異なる処理を行わせる実装はできません。

比較演算子は関連性のある全てのデータ型で使用できます。全ての比較演算子は二項演算子で、`boolean`データ型を返します。`1 < 2 < 3`のような式は（ブール値と`3`を比較する`<`演算子がないので）無効です。

比較演算子に加えて特殊な`BETWEEN`構文が使えます。

    a BETWEEN x AND y

は

    a >= x AND a <= y

`BETWEEN`は範囲内に含まれるとして終点値を扱うことに注意してください。 `NOT BETWEEN`はその反対の比較をします（指定した値は包括しません）。

    a NOT BETWEEN x AND y

は

    a < x OR a > y

と同一です。 `BETWEEN SYMMETRIC`は、`AND`の左側の引数が右側の引数より小さいか、もしくは等しいという必要性が無い点を除き`BETWEEN`と同じです。 この条件を満たしていない場合、2つの引数は自動的に置き換えられますので、常に空ではない範囲となります。

値がNULLかNULLでないかを検証するには次の構文を使います。

    expression IS NULL
    expression IS NOT NULL

あるいは、これと同等の、非標準の構文も使えます。

    expression ISNULL
    expression NOTNULL

`NULL`と`NULL`とは"等しい"関係にはありませんので、``expression` = NULL`と記述してはいけません （NULL値は不明の値を表しているため、不明な値同士が同じかどうかは識別できません）。 これは標準SQLに従った動作です。

> ティップ: アプリケーションによっては、``expression` = NULL`が、`expression`がNULL値と評価されるのであれば真を返すことを期待することがあります。こうしたアプリケーションは標準SQLに従うように改修することを強く推奨します。しかし、それができなければtransform_null_equalsを使用することで対応することができます。これを有効にした場合、PostgreSQLは`x = NULL`句を`x IS NULL`に変換します。

> 注意: `expression`が行値の場合、行式自体がNULLまたは、行のフィールドすべてがNULLの場合に`IS NULL`は真となります。一方`IS NOT NULL`は、行式自体が非NULLまたは、行のフィールドすべてが非NULLの場合に真となります。 この動作により、`IS NULL`および`IS NOT NULL`は行値評価式に対し常に反対の結果を返しません。つまりNULLと非NULLの値の両方を含む行値式はどちらの試験でも偽を返します。 この定義は標準SQLに従ったもので、8.2より前のバージョンのPostgreSQLにおける一貫性のない動作から変更されました。

入力のどちらかが真または偽ではなくNULLの場合、通常の比較演算子は（"不明"を意味する）nullを生成します。例えば`7 = NULL`はnullになります。この動作が適切でない場合は、`IS [ NOT ] DISTINCT FROM`構文を使用してください。

    expression IS DISTINCT FROM expression
    expression IS NOT DISTINCT FROM expression

非NULLの入力では、`IS DISTINCT FROM`は`<>`演算子と同じです。 しかし、入力がどちらもNULLの場合、これは偽を返し、片方の入力のみがNULLの場合は真を返します。 同様に、`IS NOT DISTINCT FROM`は非NULL入力では`=`と同じですが、両方の入力がNULLであれば真を、片方のみがNULLの場合は偽を返します。このように、これらの構文はNULLを"不明な値"ではなく、通常の値かのように動作します。

論理値も次の構文で検証できます。

    expression IS TRUE
    expression IS NOT TRUE
    expression IS FALSE
    expression IS NOT FALSE
    expression IS UNKNOWN
    expression IS NOT UNKNOWN

これらは、常に真か偽を返し、演算項目がNULLであってもNULL値を返すことはありません。NULL値が入力されると、"不明"という論理値として扱われます。`IS UNKNOWN`と`IS NOT UNKNOWN`が、入力式が論理値型でなければならないという点を除き、それぞれ実質的に`IS NULL`と`IS NOT NULL`と同じであることに注意してください。

前のページ | ホーム | 次のページ
論理演算子 | 上に戻る | 算術関数と演算子