一般情况下,NOT与!都表示逻辑非运算,即对操作数取反
- 当操作数为假值/0/小于0时,返回1;
- 当操作数为真值/大于0时,返回0;
- 当操作数为NULL时,返回NULL。
select NOT(1),!1,NOT(0),!0;
# 结果:
+--------+----+--------+----+
| NOT(1) | !1 | NOT(0) | !0 |
+--------+----+--------+----+
| 1 | 1 | 1 | 1 |
+--------+----+--------+----+
由结果可见,上述sql语句NOT与!返回值相同
但是,NOT与!的返回值也不是每次都相同的,如下:
select NOT 1+1, !+1;
+---------+------+
| NOT 1+1 | !1+1 |
+---------+------+
| 0 | 1 |
+---------+------+
有结果可见,NOT 1+1和!1+1的返回值不同,原因是运算符的优先级不同
优先级:! > + > NOT ,
所以 (1) NOT 1+1 等价于 NOT(1+1),即先计算1+1=2,然后在计算NOT(2)=0
(2) !1+1 等价于 (!1)+1,即先计算!1=0,然后再计算0+1=1
在使用逻辑运算符时,最好灵活使用括号,以确保计算顺序