首页 > 编程笔记

MySQL逻辑运算符详解

在 SQL 中,所有逻辑运算符的求值所得结果均为 True、False 或 NULL。在 MySQL 中,它们体现为 1(True)、0(False)和 NULL。逻辑运算符大多数都与不同的数据库 SQL 通用。

MySQL中的逻辑运算符如下表所示。

表 1 MySQL中的逻辑运算符
运算符 作用
NOT 或者 ! 逻辑非
AND 或者 && 逻辑与
OR 或者 || 逻辑或
XOR 逻辑异或

接下来,分别讨论不同的逻辑运算符的使用方法。

1、NOT或者!

逻辑非运算符 NOT 或者 ! 表示当操作数为 0 时,所得值为 1;当操作数为非零值时,所得值为 0;当操作数为 NULL 时,所得的返回值为 NULL。

【实例】分别使用非运算符“NOT”和“!”进行逻辑判断,SQL 语句如下:
mysql>  SELECT NOT 10, NOT (1-1), NOT -5, NOT NULL, NOT 1 + 1;
+--------+-----------+--------+----------+-----------+
| NOT 10 | NOT (1-1) | NOT -5 | NOT NULL | NOT 1 + 1 |
+--------+-----------+--------+----------+-----------+
|     0  |       1   |     0  |   NULL   |       0   |
+--------+-----------+--------+----------+-----------+

mysql> SELECT !10, !(1-1), !-5, ! NULL, ! 1 + 1;
+--------+-----------+--------+----------+-----------+
|   !10  |  !(1-1)   |  !-5   |  ! NULL  |  ! 1 + 1  |
+--------+-----------+--------+----------+-----------+
|   0    |    1      |   0    |   NULL   |     1     |
+--------+-----------+--------+----------+-----------+
mysql> SELECT ! 1+1;
+--------+
| ! 1+1- |
+--------+
|    1   |
+--------+
由结果可以看到,前 4 列“NOT”和“!”的返回值都相同。为什么最后 1 列会出现不同的值呢?这是因为“NOT”与“!”的优先级不同。

“NOT”的优先级低于“+”,因此“NOT 1+1”相当于“NOT(1+1)”,先计算“1+1”,然后再进行 NOT 运算,因为操作数不为 0,因此 NOT 1 + 1 的结果是 0;相反,“!”的优先级要高于“+”运算,因此“! 1+1”相当于“(!1)+1”,先计算“!1”,结果为 0,再加 1,最后结果为 1。

读者在使用运算符运算时,一定要注意不同运算符的优先级不同。如果不能确定计算顺序,最好使用括号,以保证运算结果的正确性。

2、AND或者&&

逻辑与运算符 AND 或者 && 表示当所有操作数均为非零值并且不为 NULL 时,计算所得结果为 1;当一个或多个操作数为 0 时,所得结果为 0;其余情况返回值为 NULL。

【实例】分别使用与运算符“AND”和“&&”进行逻辑判断,SQL 语句如下:
mysql> SELECT  1 AND -1,1 AND 0,1 AND NULL, 0 AND NULL;
+----------+---------+------------+------------+
| 1 AND -1 | 1 AND 0 | 1 AND NULL | 0 AND NULL |
+----------+---------+------------+------------+
|      1   |      0  |     NULL   |        0   |
+----------+---------+------------+------------+

mysql> SELECT  1 && -1,1 && 0,1 && NULL, 0 && NULL;
+----------+---------+------------+------------+
|  1 && -1 |  1 && 0 |  1 && NULL |  0 && NULL |
+----------+---------+------------+------------+
|       1  |     0   |     NULL   |         0  |
+----------+---------+------------+------------+
由结果可以看到,“AND”和“&&”的作用相同。“1 AND -1”中没有 0 或者 NULL,因此结果为 1;“1 AND 0”中有操作数 0,因此结果为 0;“1 AND NULL”中虽然有 NULL,但是没有操作数 0,返回结果为 NULL。

“AND”运算符可以有多个操作数,需要注意的是:多个操作数运算时,AND 两边一定要使用空格隔开,不然会影响结果的正确性。

3、OR或者||

逻辑或运算符 OR 或者 || 表示当两个操作数均为非 NULL 值且任意一个操作数为非零值时,结果为 1,否则结果为 0;当有一个操作数为 NULL,且另一个操作数为非零值时,则结果为 1,否则结果为 NULL;当两个操作数均为 NULL 时,则所得结果为 NULL。

【实例】分别使用或运算符“OR”和“||”进行逻辑判断,SQL 语句如下:
mysql> SELECT  1 OR -1 OR 0, 1 OR 2,1 OR NULL, 0 OR NULL, NULL OR NULL;
+--------------+--------+-----------+-----------+--------------+
| 1 OR -1 OR 0 | 1 OR 2 | 1 OR NULL | 0 OR NULL | NULL OR NULL |
+--------------+--------+-----------+-----------+--------------+
|         1    |     1  |       1   |     NULL  |       NULL   |
+--------------+--------+-----------+-----------+--------------+

mysql> SELECT 1||  -1  || 0, 1 || 2,1 || NULL, 0 || NULL, NULL || NULL;
+--------------+--------+-----------+-----------+--------------+
| 1 || -1 || 0 | 1 || 2 | 1 || NULL | 0 || NULL | NULL || NULL |
+--------------+--------+-----------+-----------+--------------+
|         1    |     1  |       1   |     NULL  |       NULL   |
+--------------+--------+-----------+-----------+--------------+
由结果可以看到,“OR”和“||”的作用相同:

4、XOR

逻辑异或运算符 XOR 表示当任意一个操作数为 NULL 时,返回值为 NULL;对于非 NULL 的操作数,如果两个操作数都是非 0 值或者都是 0 值,则返回结果为 0;如果一个为 0 值、另一个为非 0 值,返回结果为 1。

【实例】使用异或运算符“XOR”进行逻辑判断,SQL 语句如下:
mysql> SELECT 1 XOR 1, 0 XOR 0, 1 XOR 0, 1 XOR NULL, 1 XOR 1 XOR 1;
+---------+---------+---------+------------+---------------+
| 1 XOR 1 | 0 XOR 0 | 1 XOR 0 | 1 XOR NULL | 1 XOR 1 XOR 1 |
+---------+---------+---------+------------+---------------+
|     0   |      0  |     1   |     NULL   |           1   |
+---------+---------+---------+------------+---------------+
由结果可以看到:

a XOR b 的计算等同于 (a AND (NOT b)) 或者 ((NOT a)AND b)。

推荐阅读