在 SQL 中,所有逻辑运算符的计算结果都是 TRUE、FALSE 或 NULL(UNKNOWN)。在 MySQL 中,它们被实现为 1(TRUE)、0(FALSE)和 NULL。对于不同的 SQL 数据库服务器来说,这些处理大部分都是一样的,尽管有些服务器可能会返回任何非零值作为 TRUE。MySQL 将任何非零值、非 NULL 值求值为 TRUE。例如,以下语句均为 TRUE:mysql> SELECT 10 IS TRUE;
-> 1
mysql> SELECT -10 IS TRUE;
-> 1
mysql> SELECT 'string' IS NOT NULL;
-> 1
逻辑非。如果操作数为 0,则计算结果为 1;如果操作数为非零,则计算结果为 0,NOT NULL 返回 NULL。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 NOT 操作符。逻辑与。如果所有操作数都为非零且不为 NULL,则计算值为 1,如果一个或多个操作数为 0 则返回 0,否则返回 NULL。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 AND 运算符。逻辑或。当两个操作数都非 NULL 时,如果任何操作数都非零,则结果为 1,否则为 0。如果有一个 NULL 操作数,如果另一个操作数不为零,则结果为 1,否则为 NULL。如果两个操作数都为 NULL,则结果为 NULL。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 标准字符串连接运算符(作用类似于 CONCAT())。|| 运算符是一个非标准的 MySQL 扩展。从 MySQL 8.0.17 开始,这个操作符就被弃用了;在 MySQL 的未来版本中,对它的支持预期会被删除。应用程序应该调整为使用标准 SQL OR 运算符。例外情况:如果启用了 PIPES_AS_CONCAT,则不适用弃用原则,因为在这种情况下,|| 表示字符串串联。逻辑异或。如果任一操作数为 NULL,则返回 NULL。对于非 NULL 操作数,如果奇数个操作数为非零,则计算结果为 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
a XOR b 在数学上等于 (a AND (NOT b)) OR ((NOT a) AND b)。https://dev.mysql.com/doc/refman/8.0/en/logical-operators.html