# 12.4.3 逻辑运算符
表 12.5 逻辑运算符
姓名 | 描述 |
---|---|
和 ,&& | 逻辑与 |
不是 ,! | 否定价值 |
要么 ,|| | 逻辑或 |
异或 | 逻辑异或 |
在 SQL 中,所有逻辑运算符的计算结果为真的
,错误的
, 要么空值
(未知
)。在 MySQL 中,这些实现为 1 (真的
), 0 (错误的
), 和空值
.其中大部分对于不同的 SQL 数据库服务器是常见的,尽管有些服务器可能会返回任何非零值真的
.
MySQL 评估任何非零、非空值
值真的
.例如,以下陈述都评估为真的
:
mysql> SELECT 10 IS TRUE;
-> 1
mysql> SELECT -10 IS TRUE;
-> 1
mysql> SELECT 'string' IS NOT NULL;
-> 1
-
逻辑非。评估为
1
如果操作数是0
, 到0
如果操作数非零,并且非空
返回空值
.mysql> SELECT NOT 10; -> 0 mysql> SELECT NOT 0; -> 1 mysql> SELECT NOT NULL; -> NULL mysql> SELECT ! (1+1); -> 0 mysql> SELECT ! 1+1; -> 1
最后一个例子产生
1
因为表达式的计算方式与(!1)+1
.这
!
, 运算符是一个非标准的 MySQL 扩展。从 MySQL 8.0.17 开始,此运算符已弃用;希望它在 MySQL 的未来版本中被删除。应调整应用程序以使用标准 SQL不是
操作员。 -
逻辑与。评估为
1
如果所有操作数都是非零且不是空值
, 到0
如果一个或多个操作数是0
, 否则空值
被退回。mysql> SELECT 1 AND 1; -> 1 mysql> SELECT 1 AND 0; -> 0 mysql> SELECT 1 AND NULL; -> NULL mysql> SELECT 0 AND NULL; -> 0 mysql> SELECT NULL AND 0; -> 0
这
&&
, 运算符是一个非标准的 MySQL 扩展。从 MySQL 8.0.17 开始,此运算符已弃用;期望在 MySQL 的未来版本中删除对它的支持。应调整应用程序以使用标准 SQL和
操作员。 -
逻辑或。当两个操作数都是非
空值
,结果是1
如果任何操作数非零,并且0
否则。带一个空值
操作数,结果是1
如果另一个操作数不为零,并且空值
否则。如果两个操作数都是空值
,结果是空值
.mysql> SELECT 1 OR 1; -> 1 mysql> SELECT 1 OR 0; -> 1 mysql> SELECT 0 OR 0; -> 0 mysql> SELECT 0 OR NULL; -> NULL mysql> SELECT 1 OR NULL; -> 1
笔记
如果
PIPES_AS_CONCAT
启用 SQL 模式,||
表示 SQL 标准的字符串连接运算符(如连接()
)。这
||
, 运算符是一个非标准的 MySQL 扩展。从 MySQL 8.0.17 开始,此运算符已弃用;期望在 MySQL 的未来版本中删除对它的支持。应调整应用程序以使用标准 SQL要么
操作员。例外:如果满足以下条件,则不适用弃用PIPES_AS_CONCAT
已启用,因为在这种情况下,||
表示字符串连接。 -
逻辑异或。退货
空值
如果任一操作数是空值
.对于非空值
操作数,计算为1
如果奇数个操作数非零,否则0
被退回。mysql> SELECT 1 XOR 1; -> 0 mysql> SELECT 1 XOR 0; -> 1 mysql> SELECT 1 XOR NULL; -> NULL mysql> SELECT 1 XOR 1 XOR 1; -> 1
异或 b
数学上等于(a AND (NOT b)) OR ((NOT a) and b)
.