PostgreSQL | PostgreSQL 基本構文 | 論理演算子を使用する(AND, OR, NOT)
PostgreSQL では、論理演算子として AND、OR、NOT の 3 つが用意されている。ここでは、論理演算子の使い方について説明する。
PostgreSQL で真または偽を表す値については、「論理値データ型(boolean)」を参照する。
論理積 (AND)
AND は論理積である。左辺と右辺が TRUE、FALSE、NULL の場合、どのように判定されるかは次の一覧を確認する。
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 NULL は NULL になる一方、FALSE AND NULL は FALSE になる点に注意する。
–
実際に試してみる。次のようなテストテーブルを作成する。
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 は論理和である。左辺と右辺が TRUE、FALSE、NULL の場合、どのように判定されるかは次の一覧を確認する。
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 NULL は TRUE になる一方、FALSE OR NULL は NULL になる点に注意する。
–
実際に試してみる。論理積で使用したテーブルをそのまま使用し、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 演算子は否定である。右辺が TRUE、FALSE、NULL の場合、どのように判定されるかは次の一覧を確認する。
NOT TRUE -> FALSE
NOT FALSE -> TRUE
NOT NULL -> NULL
右辺が TRUE であれば FALSE になり、右辺が FALSE であれば TRUE になる。また、NOT NULL は NULL になる。
–
実際に試してみる。次のようなテストテーブルを作成する。
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 で提供される論理演算子の使い方について説明した。