このトピックでは、PolarDB for PostgreSQL (Compatible with Oracle) でサポートされている比較関数と演算子について説明します。
次の表に示すように、通常の比較演算子を使用できます。
比較演算子
演算子 | 説明 |
| 未満 |
| 超 |
| 以下 |
| 以上 |
| 等しい |
| 等しくない |
| 等しくない |
<>は「等しくない」の標準SQL表記です。!=はエイリアスであり、<>解析の非常に初期の段階で。 したがって、実装することはできません!=と<>さまざまなことを行う演算子。
これらの比較演算子は、数値型、文字列型、日付 /時刻型など、自然な順序を持つすべての組み込みデータ型で使用できます。 さらに、配列、複合型、および範囲は、それらのコンポーネントデータ型が比較可能である場合に比較することができる。
通常、関連するデータ型の値も比較できます。たとえば、integer > bigintが機能します。 この種のいくつかのケースは、「クロスタイプ」比較演算子によって直接実装されますが、そのような演算子が利用できない場合、パーサーは、より一般的でないタイプをより一般的なタイプに強制し、後者の比較演算子を適用します。
上記のように、すべての比較演算子は、boolean型の値を返すバイナリ演算子です。 したがって、1 < 2 < 3のような式は有効ではありません (ブール値を3と比較する < 演算子がないため) 。 範囲テストを実行するには、以下に示すBETWEEN述語を使用します。
以下の表に示すように、いくつかの比較述語もあります。 これらは演算子のように動作しますが、SQL標準によって義務付けられた特別な構文があります。
比較述語
間 (範囲のエンドポイントを含む) 。
|
(betweenの否定) の間ではありません。
|
その間、2つのエンドポイント値をソートした後。
|
2つのエンドポイント値をソートした後、その間ではありません。
|
同じではなく、nullを同等の値として扱います。
|
等しい、比較可能な値としてヌルを扱う。
|
値がnullかどうかをテストします。
|
値がnullでないかどうかをテストします。
|
値がnullかどうかをテストします (非標準構文) 。 |
値がnullでないかどうかをテストします (非標準構文) 。 |
ブール式がtrueになるかどうかをテストします。
|
ブール式がfalseか不明かをテストします。
|
ブール式がfalseになるかどうかをテストします。
|
ブール式がtrueか不明かをテストします。
|
ブール式が不明になるかどうかをテストします。
|
ブール式がtrueかfalseかをテストします。
|
BETWEEN述語は、範囲テストを簡素化します。
a xとyの間に相当します。
a >= x AND a <= yBETWEENはエンドポイント値を範囲に含まれるものとして扱います。BETWEEN SYMMETRICはBETWEENに似ていますが、ANDの左側の引数が右側の引数以下である必要はありません。 そうでない場合、これらの2つの引数は自動的に交換され、空でない範囲が常に暗示されます。
BETWEENのさまざまなバリエーションは、通常の比較演算子の観点から実装されているため、比較可能な任意のデータ型に対して機能します。
BETWEEN構文でANDを使用すると、論理演算子としてANDを使用することであいまいさが生じます。 これを解決するには、BETWEEN句の2番目の引数として、限定された式型のセットのみが許可されます。 より複雑なサブ式をBETWEENに記述する必要がある場合は、サブ式の周りに括弧を書きます。
通常の比較演算子は、どちらかの入力がnullの場合、trueまたはfalseではないnull (「不明」を意味する) を生成します。 たとえば、7 = NULLはnullを生成し、7 <> NULLも生成します。 この動作が適切でない場合は、is [not] DISTINCT FROM述語を使用します。
aはbから離れています
aはbから離れていませんnull以外の入力の場合、IS DISTINCT FROMは <> 演算子と同じです。 ただし、両方の入力がnullの場合はfalseを返し、一方の入力のみがnullの場合はtrueを返します。 同様に、IS NOT DISTINCT FROMは、非null入力の場合=と同じですが、両方の入力がnullの場合はtrueを返し、一方の入力のみがnullの場合はfalseを返します。 したがって、これらの述語は、ヌルが「未知」ではなく正常なデータ値であるかのように効果的に作用する。
値がnullであるかどうかを確認するには、述語を使用します。
式IS NULL
式はNULLではない または同等の、しかし非標準の述語:
式ISNULL
式NOTNULL NULLはNULLに等しくないため、= NULLを書き込まないでください。 (null値は未知の値を表し、2つの未知の値が等しいかどうかは不明です。)
一部のアプリケーションでは、expressionがNULL値に評価された場合、=nullがtrueを返すと予想されます。 これらのアプリケーションは、SQL標準に準拠するように変更することを強くお勧めします。 ただし、これを実行できない場合は、設定変数transform_null_equalsを使用できます。 有効にすると、PostgreSQLはx = NULL句をx is NULLに変換します。
式が行値の場合、行式自体がNULLの場合、または行のすべてのフィールドがnullの場合はis nullがtrueになり、行式自体がNULLでなく、行のすべてのフィールドがnullでない場合はIS NOT nullがtrueになります。 この動作のため、IS NULLとIS NOT NULLは、行値式に対して常に逆の結果を返すとは限りません。特に、nullフィールドとnull以外のフィールドの両方を含む行値式は、両方のテストでfalseを返します。 場合によっては、row IS DISTINCT FROM NULLまたはrow IS NOT DISTINCT FROM NULLを書き込むことが好ましい場合があります。
述語を使用してブール値をテストすることもできます。
bolean_expressionはTRUE
boolean_expressionは正しくありません
boolean_expressionは間違っています
boolean_expressionは偽ではありません
boolean_expressionは不明です
boolean_expressionは不明ではありませんこれらは、オペランドがnullの場合でも、常にtrueまたはfalseを返し、null値は返しません。 ヌル入力は、論理値「unknown」として扱われる。 IS UNKNOWNおよびIS NOT UNKNOWNは、入力式がブール型でなければならないことを除いて、それぞれIS NULLおよびIS NOT NULLと実質的に同じであることに注意してください。
比較関数
以下の表に示すように、いくつかの比較関連関数も利用できます。
null以外の引数の数を返します。
|
null引数の数を返します。
|