論理演算子

広告

比較演算子を使うことで値と値を比較して真が偽かの判別が行えますが、さらに「AはBと等しいかCよりも大きい」などより複雑な比較を行う為に使用するのが論理演算子です。MySQLで利用可能な論理演算子は次の通りです。

演算子使用例意味
ANDa AND ba と b が共にTRUEの時にTRUE
&&a && ba と b が共にTRUEの時にTRUE
ORa OR ba か b の少なくとも1つがTRUEの場合にTRUE
||a || ba か b の少なくとも1つがTRUEの場合にTRUE
XORa XOR ba か b のどちらか1つがTRUEの場合にTRUE
NOTNOT aa がTRUEならFALSE、a がFALSEならTRUE
!! aa がTRUEならFALSE、a がFALSEならTRUE

論理演算子では左辺及び右辺に比較演算子を使った式を記述するのが主な利用方法です。それぞれの比較演算子を評価し、さらに論理演算子を使って全体の結果として1(=TRUE)、0(=FALSE)、またはNULLのいずれかを返します。

では一つ一つ確認していきます。

論理積

「AND」及び「&&」は論理積です。左辺及び右辺が共にNULLでも0でない場合に全体が1となり、左辺又は右辺のいずれか一つでも0の場合(もう片方がNULLであっても)に全体が0となります。それ以外の場合は全体がNULLとなります。

1 AND 1        -> 1
1 AND 0        -> 0
0 AND 1        -> 0
0 AND 0        -> 0
NULL AND 1     -> NULL
NULL AND 0     -> 0
NULL AND NULL  -> NULL

では試してみます。

mysql> select 3 > 2 and 4 between 1 and 10;

p8-1

上記の場合、「3 > 2」が1を返し「4 between 1 and 10」も1を返しますので全体としても1を返します。

もう一つ試します。

mysql> select 5 > 2 and 5 > 4;

p8-2

上記の場合、「5 > 2」が1を返しますが「5 > 4;」は0を返しますので全体としては0を返します。

論理和

「OR」及び「||」は論理和です。左辺及び右辺がNULLでない場合、どちらか1つでも0でない場合に全体が1となり、それ以外は全体が0となります。どちらかがNULLの場合、もう片方が1の場合に全体が1とない、それ以外はNULLとなります。

1 OR 1         -> 1
1 OR 0         -> 1
0 OR 1         -> 1
0 OR 0         -> 0
NULL OR 1      -> 1
NULL OR 0      -> NULL
NULL OR NULL   -> NULL

では試してみます。

mysql> select 3 < 10 or 5 > 2;

p8-3

上記の場合、「3 < 10」は0を返しますが「5 > 2」が1を返しますので全体としては1を返します。

排他的論理和

「XOR」は排他的論理和です。左辺及び右辺がNULLでない場合、どちらか1つだけが0の場合に全体が1となります。両方が0、又は両方が0でない場合は全体が0となります。どちらか一つでもNULLの場合、全体がNULLとなります。

1 XOR 1        -> 0
1 XOR 0        -> 1
0 XOR 1        -> 1
0 XOR 0        -> 0
NULL XOR 1     -> NULL
NULL XOR 0     -> NULL
NULL XOR NULL  -> NULL

では試してみます。

mysql> select 5 > 3 xor 10 <> 5;

p8-4

上記の場合、「5 > 3」は1を返し「10 <> 5」も1を返しますので全体としては0を返します。

論理否定

「NOT」と「!」は論理否定です。右辺が0の場合に全体が1となり、右辺が0以外の場合に1となります。右辺がNULLの場合は全体もNULLとなります。

NOT 1          -> 0
NOT 0          -> 1
NOT NULL       -> NULL

では試してみます。

mysql> select not 2009 in (2007, 2008, 2009);

p8-5

上記の場合、「2009 in (2007, 2008, 2009)」は1を返しますので全体としては0を返します。

( Written by Tatsuo Ikura )