Mysql教程

12.4逻辑运算符

逻辑运算符用来判断表达式的真假。逻辑运算符的返回结果只有1和0。如果表达式是真,结果返回1。如果表达式是假,结果返回0。逻辑运算符又称为布尔运算符。MySQL 中支持四种逻辑运算符。这四种逻辑运算符分别是与、或、非和异或。下面是4种逻辑运 算符的符号、名称,如下表所示。

符号 名称 符号 名称
&&或者AND !或者NOT
||或者OR XOR 异或

下面分别对表中的逻辑运算符进行讲解。

1.与运算

“&&”或者AND表示与运算。所有操作数不为0且不为空值(NULL)时,结果返回1;存在任何一个操作数为0时,结果返回0;存在一个操作数为NULL且没有操作数为0时,结果返回NULL。与运算符“&&”可以有多个操作数同时进行与运算,其基本形式为 “ x1 && x2 &&... && xn ”。

【示例12-16】下面是使用“&&”的例子。

mysql> SELECT -1 && 2 && 3,0 && 3, 0 && NULL ,3 && NULL ;
+-------------+--------+-----------+-----------+
|-1 && 2 && 3 | 0 && 3 | 0 && NULL | 3 && NULL |
+-------------+--------+-----------+-----------+
|      1      |   0    |     0     |   NULL    |
+-------------+--------+-----------+-----------+
1row in set(0.00 sec)

结果显示,“-1 && 2 && 3”中没有值为0和NULL,所以结果返回1; “0 &&3 ”和 “ 0 && NULL”中存在操作数为0,所以结果返回0; “3 && NULL”中存在操作数为NULL且没有没有操作数为0,所以结果返回NULL。

与运算符AND可以有多个操作数同时进行与运算,其基本形式为 xl AND x2AND... AND xn。但是多操作数与AND之间要用空格隔开。

【示例12-17】下面是使用“AND”的例子。

mysql> SELECT -1 AND 2 AND 3,0 AND 3,0 AND NULL,3 AND NULL;
+----------------+---------+------------+------------+
| -1 AND 2 AND 3 | 0 AND 3 | 0 AND NULL | 3 AND NULL |
+----------------+---------+------------+------------+
|         1      |    0    |     0      |   NULL     |
+----------------+---------+------------+------------+
1 row in set (0.00 sec)

结果显示,“-1 AND 2 AND 3”中没有值为0和NULL,所以结果返回1; “0 AND 3” 和“0 AND NULL”中存在操作数为0,所以结果返回0; “3 AND NULL”中存在操作数 SNULL,且没有操作数为0,所以结果返回NULL

注意:只要与运算中存在操作数为0,则运算结果一定为0。如“3&&-1&&NULL&&0” 中,尽管表达式中包含NULL和负数,但是结果由操作数0最终决定。如果操作数都是非0数,而且不包含NULL,那么结果返回1。如“-1&&-2&&-3&&0.3” 中,尽管操作数包括负数和小数,结果依然是1。因为与运算时,负数和大于0 的数都等价与1。

2.或运算

“||”或者0R表示或运算。所有操作数中存在任何一个操作数不为非0的数字时,结果返回1;如果操作数中不包含非0的数字,但包含NULL时,结果返回NULL如果操作数中只有0时,结果返回0。或运算符“||”可以有多个操作数同时进行或运算,其基本 形式为 “xl||x2||...||xn”。

【示例12-18】下面是使用“||”的例子。

mysql> SELECT 1||-1||NULL||0, 3||NULL, 0||NULL, NULL||NULL, 0||0;
+------------------+----------+------------+------------+------+
| 1||-1|| NULL||0  |  3||NULL | 0 || NULL  | NULL||NULL | 0||0 |
+------------------+----------+------------+------------+------+
|         1        |     1    |   NULL     |   NULL     |  0   |
+-------+----------+----------+------------+------------+------+
1 row in set (0.00 sec)

结果显示,“1||-1||NULL||0”中尽管包含NULL和0,由于其中也包含1和-1这两个非 0的数字,所以结果返回1; “3||NULL”中包含数字3,所以结果也返回1; “0||NULL”中 只包含0和NULL,所以结果返回NULL “NULL||NULL”中只包含NULL,所以结果返回NULL;“0||0”中只有数字0,所以结果返回0。

或运算符OR可以有多个操作数同时进行或运算,其基本形式为xl OR x2 OR...OR xn。

【示例12-19】下面是使用“OR”的例子。

mysql> SELECT 1 OR-1 OR NULL OR 0, 3 OR NULL, 0 OR NULL, NULL OR NULL, 0 OR 0;
+--------------------+-----------+------------+--------------+-------+
| 1 OR-1 OR NULL OR  | 3 OR NULL | 0 OR NULL  | NULL OR NULL |  OR 0 |
+--------------------+-----------+------------+--------------+-------+
|         1          |     1     |   NULL     |   NULL       |   0   |
+--------------------+-----------+------------+--------------+-------+
1 row in set (0.00 sec)

结果与上一个例子的结果是一样的。

3. 非运算

“!”或者NOT表示非运算。通过非运算,将返回与操作数相反的结果。如果操作数是非0的数字,结果返回0;如果操作数是0,结果返回1;如果操作数是NULL结果返 回NULL。或运算符“!”只能有一个操作数进行非运算,其基本形式为“!xl”。

【示例12-20】下面是使用“!”的例子

mysql> SELECT !1, !0.3, !-3, !0, !NULL;
+----+------+-----+----+-------+
| !1 | !0.3 | !-3 | !0 | !NULL |
+----+------+-----+----+-------+
|  0 |   0  |  0  |  1 |  NULL |
+----+------+-----+----+-------+
1 row in set (0.00 sec)

因为1、0.3和-3都是非0的数字,所以结果返回0;操作数是0时,返回结果为1; 操作数是NULL时,返回结果为NULL或运算符NOT只能有一个操作数进行非运算,其基本形式为NOT xl。

【示例12-21】下面是使用NOT的例子。

mysql> SELECT NOT 1, NOT 0.3, NOT -3, NOT 0, NOT NULL;
+-------+---------+--------+-------+----------+
| NOT 1 | NOT 0.3 | NOT -3 | NOT 0 | NOT NULL |
+-------+---------+--------+-------+----------+
|    0  |    0    |    0   |    1  |    NULL  |
+-------+---------+--------+-------+----------+
1 row in set (0.00 sec)

结果与使用“!”的是一样的。

4.异或运算

XOR表示异或运算。异或运算符XOR的基本形式为“xl XOR x2”。只要其中任何一 个操作数为见NULL时,结果返回NULL;如果x1和x2都是非0的数字或者都是0时,结果返回0;如果x1和x2中一个是非0,另一个是0时,结果返回1。

【示例12-22】下面是使用“XOR”的例子。

mysql> SELECT NULL XOR 1, NULL XOR 0, 3 XOR 1,1 XOR 0, 0 XOR 0, 3 XOR 2 XOR 0 XOR 1;
+------------+------------+---------+---------+---------+---------------------+
| NULL XOR 1 | NULL XOR 0 | 3 XOR 1 | 1 XOR 0 | 0 XOR 0 | 3 XOR 2 XOR 0 XOR 1 |
+------------+------------+---------+---------+---------+---------------------+
|   NULL     |    NULL    |    0    |     1   |     0   |          1          |
+------------+------------+---------+---------+---------+---------------------+
1 row in set (0.00 sec)

因为“NULL XOR 1”和“NULL XOR O”中包含了NULL所以返回结果是NULL;“3 XOR 1”两个操作数都是非0的数字,结果返回0; “1 XOR 0”中一个是非0数字,一个是0,所以结果返回1; “0 XOR 0”中的操作数都是0,所以结果返回0; “3 XOR 2 XOR O XOR 1”中有多个操作数,计算时是从左到右依次计算的。先将“3 XOR 2”计算出来,将计算结果与0再进行计算,依次类推。

说明:MySQL中进行异或运算时,所有大于-1小于1的数字都被视为逻辑0,其他数字被视为逻辑1。如果两个操作数同为逻辑0,或者同为逻辑1时,结果返回0。 即逻辑相同时,返回0。如果两个操作数一个是逻辑0,另一个是逻辑1,结果返 回1。即逻辑不同时,返回1。“0.3 XOR 3.3”返回的结果是1。因为0.3属于逻辑0, 3.3属于逻辑1。


关注微信获取最新动态