表9-1に示す、通常の比較演算子は使用可能です。
注意: !=演算子は構文解析で<>に変換されます。!=演算子と<>演算子に異なる処理を行わせる実装はできません。
比較演算子はその意味が通るならば全てのデータ型で使用できます。全ての比較演算子は二項演算子で、booleanデータ型を返します。1 < 2 < 3のような式は(ブール値と3を比較する<演算子がないので)無効です。
a BETWEEN x AND y
は
a >= x AND a <= y
と同一です。同様に、
a NOT BETWEEN x AND y
と同一です。
a < x OR a > y
内部的に最初の形式を2番目の形式に書き換えるのに必要となるCPUサイクル以外それぞれの形式には違いはありません。 BETWEEN SYMMETRICは、ANDの左側の引数が右側の引数より小さいか、もしくは等しいという必要性が無い点を除きBETWEENと同じです。適切な範囲は自動的に決定されます。
値が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に変換します。これはPostgreSQLのリリース6.5から7.1まではデフォルトでした。
注意: expressionが行値の場合、行式自体がNULLまたは、行のフィールドすべてがNULLの場合にIS NULLは真となります。 一方IS NOT NULLは、行式自体が非NULLまたは、行のフィールドすべてが非NULLの場合に真となります。 この定義は標準SQLに従ったもので、8.2より前のバージョンのPostgreSQLにおける一貫性のない動作から変更されました。
入力のどちらかが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が、入力式がBoolean型でなければならないという点を除き、それぞれ実質的にIS NULLとIS NOT NULLと同じであることに注意してください。