MySQL逻辑运算符详解
在 SQL 中,所有逻辑运算符的求值所得结果均为 True、False 或 NULL。在 MySQL 中,它们体现为 1(True)、0(False)和 NULL。逻辑运算符大多数都与不同的数据库 SQL 通用。
MySQL中的逻辑运算符如下表所示。
接下来,分别讨论不同的逻辑运算符的使用方法。
【实例】分别使用非运算符“NOT”和“!”进行逻辑判断,SQL 语句如下:
“NOT”的优先级低于“+”,因此“NOT 1+1”相当于“NOT(1+1)”,先计算“1+1”,然后再进行 NOT 运算,因为操作数不为 0,因此 NOT 1 + 1 的结果是 0;相反,“!”的优先级要高于“+”运算,因此“! 1+1”相当于“(!1)+1”,先计算“!1”,结果为 0,再加 1,最后结果为 1。
【实例】分别使用与运算符“AND”和“&&”进行逻辑判断,SQL 语句如下:
【实例】分别使用或运算符“OR”和“||”进行逻辑判断,SQL 语句如下:
【实例】使用异或运算符“XOR”进行逻辑判断,SQL 语句如下:
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”和“||”的作用相同:
- “1 OR -1 OR 0”中有 0,但同时包含有非 0 的值 1 和 -1,返回结果为 1;
- “1 OR 2”中没有操作数 0,返回结果为 1;
- “1 OR NULL”中虽然有 NULL,但是有操作数 1,返回结果为 1;
- “0 OR NULL”中没有非 0 值,并且有 NULL,返回结果为 NULL;
- “NULL OR NULL”中只有 NULL,返回结果为 NULL。
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 | +---------+---------+---------+------------+---------------+由结果可以看到:
- 在“1 XOR 1”和“0 XOR 0”中,运算符两边的操作数都为非零值或者都是零值,因此返回 0;
- 在“1 XOR 0”中,两边的操作数一个为 0 值、一个为非 0 值,返回结果为 1;
- 在“1 XOR NULL”中,有一个操作数为 NULL,返回结果为 NULL;
- 在“1 XOR 1 XOR 1”中,有多个操作数,运算符相同,因此运算顺序从左到右依次计算,“1 XOR 1”的结果为 0,再与 1 进行异或运算,最终结果为 1。
a XOR b 的计算等同于 (a AND (NOT b)) 或者 ((NOT a)AND b)。