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)
に等価です。