PostgreSQL | PostgreSQL 基本構文 | 論理演算子を使用する(AND, OR, NOT)

PostgreSQL では、論理演算子として ANDORNOT の 3 つが用意されている。ここでは、論理演算子の使い方について説明する。

PostgreSQL で真または偽を表す値については、「論理値データ型(boolean)」を参照する。

論理積 (AND)

AND は論理積である。左辺と右辺が TRUEFALSENULL の場合、どのように判定されるかは次の一覧を確認する。

TRUE   AND  TRUE   -> TRUE
TRUE   AND  FALSE  -> FALSE
TRUE   AND  NULL   -> NULL
FALSE  AND  FALSE  -> FALSE
FALSE  AND  NULL   -> FALSE
NULL   AND  NULL   -> NULL

式全体が TRUE になるのは、左辺と右辺がどちらも TRUE の場合だけである。また、TRUE AND NULLNULL になる一方、FALSE AND NULLFALSE になる点に注意する。

実際に試してみる。次のようなテストテーブルを作成する。

mydb=# create table test(flag1 boolean,  flag2 boolean);
CREATE TABLE
mydb=#

次のようなデータをテーブルに追加する。

mydb=# insert into test values (TRUE, TRUE), (TRUE, FALSE), (TRUE, NULL), (FALSE, FALSE), (FALSE, NULL), (NULL, NULL);
INSERT 0 6
mydb=# select * from test;
 flag1 | flag2
-------+-------
 t     | t
 t     | f
 t     |
 f     | f
 f     |
       |
(6 行)

そして SELECT コマンドを使用し、論理積で左辺と右辺の値によって全体がどのように判定されるか確認してみる。

mydb=# select flag1, flag2, flag1 and flag2 as "flag1 and flag2" from test;
 flag1 | flag2 | flag1 and flag2
-------+-------+-----------------
 t     | t     | t
 t     | f     | f
 t     |       |
 f     | f     | f
 f     |       | f
       |       |
(6 行)

これで、左辺と右辺の値によって論理積の結果がどうなるかを確認できる。

論理和 (OR)

OR は論理和である。左辺と右辺が TRUEFALSENULL の場合、どのように判定されるかは次の一覧を確認する。

TRUE   OR  TRUE   -> TRUE
TRUE   OR  FALSE  -> TRUE
TRUE   OR  NULL   -> TRUE
FALSE  OR  FALSE  -> FALSE
FALSE  OR  NULL   -> NULL
NULL   OR  NULL   -> NULL

左辺と右辺の少なくともどちらか一方が TRUE の場合、式全体は TRUE である。また、TRUE OR NULLTRUE になる一方、FALSE OR NULLNULL になる点に注意する。

実際に試してみる。論理積で使用したテーブルをそのまま使用し、SELECT コマンドで論理和が左辺と右辺によってどのように判定されるか確認する。

mydb=# select flag1, flag2, flag1 or flag2 as "flag1 or flag2" from test;
 flag1 | flag2 | flag1 or flag2
-------+-------+----------------
 t     | t     | t
 t     | f     | t
 t     |       | t
 f     | f     | f
 f     |       |
       |       |
(6 行)

これで、左辺と右辺の値によって論理和の結果がどうなるかを確認できる。

否定 (NOT)

NOT 演算子は否定である。右辺が TRUEFALSENULL の場合、どのように判定されるかは次の一覧を確認する。

NOT  TRUE   -> FALSE
NOT  FALSE  -> TRUE
NOT  NULL   -> NULL

右辺が TRUE であれば FALSE になり、右辺が FALSE であれば TRUE になる。また、NOT NULLNULL になる。

実際に試してみる。次のようなテストテーブルを作成する。

mydb=# create table test2( flag boolean);
CREATE TABLE
mydb=#

次のようなデータをテーブルに追加する。

mydb=# insert into test2 values (TRUE),(FALSE),(NULL);
INSERT 0 3
mydb=#

それでは SELECT コマンドを使用し、否定の右辺の値によって結果がどのように判定されるか確認してみる。

mydb=# select flag, not flag as "not flag" from test2;
 flag | not flag
------+----------
 t    | f
 f    | t
      |
(3 行)

これで、右辺の値によって否定の結果がどうなるかを確認できる。

ここまで、PostgreSQL で提供される論理演算子の使い方について説明した。