SQL では、すべての論理演算子は
TRUE
、FALSE 、または
NULL に評価されます
(UNKNOWN) 。MySQL
では、これらは 1
(TRUE) 、0
(FALSE) 、そして
NULL
として実行されます。サーバーのあるものは
TRUE
にゼロ以外のすべての値を返す場合があるものの、このほとんどは各種の
SQL
データベースサーバーにとって通常のことです。
MySQL では、ゼロでも
NULL
でもない値はすべて、TRUE
と評価されます。たとえば、次のステートメントはすべて
TRUE と評価されます。
mysql>SELECT 10 IS TRUE;-> 1 mysql>SELECT -10 IS TRUE;-> 1 mysql>SELECT 'string' IS NOT NULL;-> 1
NOT 演算。オペランドが
0 の場合は
1
に、オペランドがゼロ以外の場合は
0
にそれぞれ評価され、NOT
NULL の場合は
NULL
が返されます。
mysql>SELECT NOT 10;-> 0 mysql>SELECT NOT 0;-> 1 mysql>SELECT NOT NULL;-> NULL mysql>SELECT ! (1+1);-> 0 mysql>SELECT ! 1+1;-> 1
最後の例では 1
が生成されていますが、これは、式の評価が
(!1)+1
と同様に行われるからです。
AND 演算。すべてオペランドがゼロ以外で非
NULL の場合は
1 に、1
つ以上のオペランドが
0 の場合は
0
にし、それ以外は
NULL を返します。
mysql>SELECT 1 && 1;-> 1 mysql>SELECT 1 && 0;-> 0 mysql>SELECT 1 && NULL;-> NULL mysql>SELECT 0 && NULL;-> 0 mysql>SELECT NULL && 0;-> 0
OR 演算。両方のオペランドが非
NULL
であるとき、オペランドのどれかがゼロ以外である場合は結果は
1、その他は
0 になります。1
つが NULL
オペランドであれば、ほかのオペランドがゼロ以外である場合の結果は
1、その他は
NULL
になります。両方のオペランドが
NULL
であれば、結果は
NULL になります。
mysql>SELECT 1 || 1;-> 1 mysql>SELECT 1 || 0;-> 1 mysql>SELECT 0 || 0;-> 0 mysql>SELECT 0 || NULL;-> NULL mysql>SELECT 1 || NULL;-> 1
XOR 演算。オペランドのどちらかが
NULL である場合は
NULL
を返します。非
NULL
のオペランドの場合、ゼロ以外のオペランドの数が奇数であれば
1
にし、それ以外は
0 を返します。
mysql>SELECT 1 XOR 1;-> 0 mysql>SELECT 1 XOR 0;-> 1 mysql>SELECT 1 XOR NULL;-> NULL mysql>SELECT 1 XOR 1 XOR 1;-> 1
a XOR b
は、数学的に (a AND (NOT b))
OR ((NOT a) and b) に等価です。
