# 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).