当前位置:嗨网首页>书籍在线阅读

13-逻辑运算符

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

6.3.4 逻辑运算符

在SQL中,所有逻辑运算符的求值所得结果均为TRUE、FALSE或NULL。在MySQL中,它们分别显示为1(TRUE)、0(FALSE)和NULL。其中大多数都与其他的SQL数据库通用,MySQL中的逻辑运算符如下表所示。

Figure-0171-157.jpg 下面,分别讨论不同逻辑运算符的使用方法。

1.NOT 或者 !

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

【范例6-44】

分别使用逻辑非运算符NOT和“!”进行逻辑判断,SQL语句如下。

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

由结果可以看到,前4列NOT和“!”的返回值都相同。但是最后1列结果不同。出现这种结果的原因是NOT与“!”的优先级不同。NOT的优先级低于“+”,因此“NOT 2+2”先计算“2+2”,然后在进行逻辑非运算,因为操作数不为0,因此“NOT 2+2”最终返回值为0;另一个逻辑非运算符“!”的优先级高于“+”运算符,因此“!2+2”先进行逻辑非运算“!2”,结果为0,然后再进行加法运算“0+2”,因此,最终返回值为2。

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

2.AND或者&&

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

【范例6-45】

分别使用逻辑与运算符AND和“&&”进行逻辑判断,SQL语句如下。

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

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

3.OR 或者 ||

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

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

【范例6-46】

分别使用逻辑或运算符OR和“||”进行逻辑判断,SQL语句如下。

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

由结果可以看出,OR和“||”的作用相同。“2 OR -2 OR 0”中有0,但同时包含有非0的值2和-2,返回值结果为1;“2 OR 3”中没有操作数0,返回值结果为1;“2 || NULL”中虽然有NULL,但是有操作数2,返回值结果为1;“0 OR NULL”中没有非0值,并且有NULL,返回结果为NULL;“NULL OR NULL”中只有NULL,返回值结果为NULL。

4.XOR

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

【范例6-47】

使用异或运算符XOR进行逻辑判断,SQL语句如下。

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

由结果可以看到,“2 XOR 2”和“0 XOR 0”中运算符两边的操作数都为非零值,或者都是零值,因此返回0;“2 XOR 0”中两边的操作数,一个为0值,另一个为非0值,返回结果为1;“2 XOR NULL”中有一个操作数为NULL,返回值为NULL;“2 XOR 2 XOR 2”中有多个操作数,运算符相同,因此运算顺序从左到右依次运算,“2 XOR 2”的结果为0,再与2进行异或运算,因此结果为1。

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