运算符 | 作用 |
---|---|
NOT 或者 ! | 逻辑非 |
AND 或者 && | 逻辑与 |
OR 和 || | 逻辑或 |
XOR | 逻辑异或 |
NOT
和!
都是逻辑非运算符,返回和操作数相反的结果,具体语法规则为:
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 | +--------+----------+-------+----------+---------+ 1 row in set (0.00 sec) mysql> SELECT !10,!(1-1),!-5,!NULL,!1+1; +-----+--------+-----+-------+------+ | !10 | !(1-1) | !-5 | !NULL | !1+1 | +-----+--------+-----+-------+------+ | 0 | 1 | 0 | NULL | 1 | +-----+--------+-----+-------+------+ 1 row in set (0.00 sec) mysql> SELECT !1+1; +------+ | !1+1 | +------+ | 1 | +------+ 1 row in set (0.00 sec)由运行结果可以看出,
NOT 1+1
和! 1+1
的返回值不同,这是因为 NOT 与 ! 的优先级不同:
NOT 1+1
相当于NOT(1+1)
,先计算1+1
,然后再进行 NOT 运算,由于操作数不为 0,因此NOT 1+1
的结果是 0;! 1+1
相当于(!1)+1
,先计算!1
结果为 0,再加 1,最后结果为 1。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 | +----------+---------+------------+------------+ 1 row in set (0.00 sec) mysql> SELECT 1 && -1,1&&0,1&&NULL,0&&NULL; +---------+------+---------+---------+ | 1 && -1 | 1&&0 | 1&&NULL | 0&&NULL | +---------+------+---------+---------+ | 1 | 0 | NULL | 0 | +---------+------+---------+---------+ 1 row in set (0.00 sec)由结果可以看到,AND 和 && 的作用相同。
1 AND-1
中没有 0 或者 NULL,所以返回值为 1;1 AND 0
中有操作数 0,所以返回值为 0;1 AND NULL
虽然有 NULL,所以返回值为 NULL。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 | +--------------+--------+-----------+-----------+--------------+ 1 row in set (0.00 sec) 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 | +--------------+------+---------+---------+------------+ 1 row in set (0.00 sec)由结果可以看到,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。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 row in set (0.00 sec)由结果可以看到:
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)。
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有