表9.1「比較演算子」に示す、通常の比較演算子が使用可能です。
表9.1 比較演算子
| 演算子 | 説明 |
|---|---|
< | 小なり |
> | 大なり |
<= | 等しいかそれ以下 |
>= | 等しいかそれ以上 |
= | 等しい |
<> または != | 等しくない |
!=演算子は構文解析で<>に変換されます。
!=演算子と<>演算子に異なる処理を行わせる実装はできません。
比較演算子は関連性のある全てのデータ型で使用できます。
全ての比較演算子は二項演算子で、boolean型の値を返します。1 < 2 < 3のような式は(ブール値と3を比較する<演算子がないので)無効です。
aBETWEENxANDy
は
a>=xANDa<=y
と同じです。
BETWEENは範囲内に含まれるとして終点値を扱うことに注意してください。
NOT BETWEENはその反対の比較をします(指定した値は包括しません)。
aNOT BETWEENxANDy
は
a<xORa>y
と同一です。
BETWEEN SYMMETRICは、ANDの左側の引数が右側の引数より小さいか、もしくは等しいという必要性が無い点を除きBETWEENと同じです。
この条件を満たしていない場合、2つの引数は自動的に交換されますので、常に空ではない範囲となります。
値がNULLかNULLでないかを検証するには次の構文を使います。
expressionIS NULLexpressionIS NOT NULL
あるいは、これと同等の、非標準の構文も使えます。
expressionISNULLexpressionNOTNULL
NULLとNULLとは「等しい」関係にはありませんので、と記述してはいけません
(NULL値は不明の値を表しているため、不明な値同士が同じかどうかは識別できません)。
これは標準SQLに従った動作です。
expression = NULL
アプリケーションによっては、が、expression = NULLexpressionが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になります。7 <> NULLも同様です。
この動作が適切でない場合は、IS [ NOT ] DISTINCT FROM構文を使用してください。
expressionIS DISTINCT FROMexpressionexpressionIS NOT DISTINCT FROMexpression
非NULLの入力では、IS DISTINCT FROMは<>演算子と同じです。
しかし、入力がどちらもNULLの場合、これは偽を返し、片方の入力のみがNULLの場合は真を返します。
同様に、IS NOT DISTINCT FROMは非NULL入力では=と同じですが、両方の入力がNULLであれば真を、片方のみがNULLの場合は偽を返します。
このように、これらの構文はNULLを「不明な値」ではなく、通常の値かのように動作します。
expressionIS TRUEexpressionIS NOT TRUEexpressionIS FALSEexpressionIS NOT FALSEexpressionIS UNKNOWNexpressionIS NOT UNKNOWN
これらは、常に真か偽を返し、演算項目がNULLであってもNULL値を返すことはありません。
NULL値が入力されると、「不明」という論理値として扱われます。
IS UNKNOWNとIS NOT UNKNOWNが、入力式が論理値型でなければならないという点を除き、それぞれ実質的にIS NULLとIS NOT NULLと同じであることに注意してください。