在 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
逻辑 NOT。如果操作数为
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 的未来版本中被移除。应用(如有必要)应调整为改用标准 SQLNOT
运算符。逻辑 AND。如果所有操作数均为非零且不为
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 的未来版本中被移除。应用(如有必要)应调整为改用标准 SQLAND
运算符。逻辑 OR。当两个操作数均为非
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 的未来版本中被移除。应用(如有必要)应调整为改用标准 SQLOR
运算符。例外:如果PIPES_AS_CONCAT
已启用,则弃用不适用,因为在这种情况下,||
表示字符串连接。逻辑 XOR。如果任何操作数为
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)
。