すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:論理演算子

最終更新日:Mar 28, 2026

AnalyticDB for PostgreSQL は、PostgreSQL と同一の論理演算子をサポートしています。ANDOR、および NOT を使用して、SQL クエリ内の複雑なフィルター条件を構築します。

PostgreSQL の完全な仕様については、「論理演算子」をご参照ください。

演算子

演算子構文説明
ANDa AND b両方のオペランドが TRUE の場合に TRUE を返します
ORa OR b少なくとも一方のオペランドが TRUE の場合に TRUE を返します
NOTNOT aオペランドのブール値を反転します

演算子の優先順位(高い順):

  1. NOT

  2. AND

  3. OR

単一の条件内で複数の演算子を組み合わせる場合、デフォルトの優先順位を上書きするには、括弧を使用します。

NULL の動作

NULL を含む論理演算は、必ずしも NULL を返すわけではありません。たとえば、NULL AND FALSE は FALSE と評価され、NULL OR TRUE は TRUE と評価されます。

完全な真理値表を以下に示します。

AND および OR の真理値表

aba AND ba OR b
TRUETRUETRUETRUE
TRUEFALSEFALSETRUE
TRUENULLNULLTRUE
FALSEFALSEFALSEFALSE
FALSENULLFALSENULL
NULLNULLNULLNULL

NOT

aNOT a
TRUEFALSE
FALSETRUE
NULLNULL

以下の例では、サンプルテーブルを使用して、各演算子による行のフィルタリング方法を示します。

CREATE TABLE orders (id INT, amount INT, status VARCHAR);
INSERT INTO orders VALUES
  (1, 8,  'shipped'),
  (2, 25, 'pending'),
  (3, 15, 'pending'),
  (4, 47, 'shipped');

AND — 両方の条件が真である必要があります

SELECT * FROM orders WHERE amount > 20 AND status = 'pending';

結果:

 id | amount | status
----+--------+---------
  2 |     25 | pending

OR — いずれかの条件が真であれば構いません

SELECT * FROM orders WHERE amount > 20 OR status = 'pending';

結果:

 id | amount | status
----+--------+---------
  2 |     25 | pending
  3 |     15 | pending
  4 |     47 | shipped

優先順位 — AND は OR よりも優先度が高い

次のクエリは、status = 'pending' である行、または amount = 8 かつ status = 'shipped' である行を返します。AND は最初に評価されます。

SELECT * FROM orders WHERE status = 'pending' OR amount = 8 AND status = 'shipped';

結果:

 id | amount | status
----+--------+---------
  1 |      8 | shipped
  2 |     25 | pending
  3 |     15 | pending

OR を最初に評価するには、括弧を追加します:

SELECT * FROM orders WHERE (status = 'pending' OR amount = 8) AND status = 'shipped';

結果:

 id | amount | status
----+--------+---------
  1 |      8 | shipped

NOT — 条件を否定します

SELECT * FROM orders WHERE NOT status = 'shipped';

結果:

 id | amount | status
----+--------+---------
  2 |     25 | pending
  3 |     15 | pending