- Home ›
- MySQLの使い方 ›
- MySQLの基本構文 ›
- HERE
論理演算子
比較演算子を使うことで値と値を比較して真が偽かの判別が行えますが、さらに「AはBと等しいかCよりも大きい」などより複雑な比較を行う為に使用するのが論理演算子です。MySQLで利用可能な論理演算子は次の通りです。
演算子 | 使用例 | 意味 |
---|---|---|
AND | a AND b | a と b が共にTRUEの時にTRUE |
&& | a && b | a と b が共にTRUEの時にTRUE |
OR | a OR b | a か b の少なくとも1つがTRUEの場合にTRUE |
|| | a || b | a か b の少なくとも1つがTRUEの場合にTRUE |
XOR | a XOR b | a か b のどちらか1つがTRUEの場合にTRUE |
NOT | NOT a | a がTRUEならFALSE、a がFALSEならTRUE |
! | ! a | a が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;
上記の場合、「3 > 2」が1を返し「4 between 1 and 10」も1を返しますので全体としても1を返します。
もう一つ試します。
mysql> select 5 > 2 and 5 > 4;
上記の場合、「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;
上記の場合、「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;
上記の場合、「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);
上記の場合、「2009 in (2007, 2008, 2009)」は1を返しますので全体としては0を返します。
( Written by Tatsuo Ikura )