14.4.3 逻辑运算符
在 SQL 中,所有逻辑运算符都将评估为 TRUE、FALSE 或 NULL (UNKNOWN)。在 MySQL 中,这些操作符实现为 1 (TRUE)、0 (FALSE) 和 NULL。大多数情况下,这与不同 SQL 数据库服务器的实现相同,although some servers may return any nonzero value for 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。评估为
1如果操作数为0,为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。评估为
1如果所有操作数非零且不为NULL,为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操作符。 -
逻辑或。两个操作数都不是
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; -> 1Note如果启用了
PIPES_AS_CONCATSQL 模式,||表示标准的字符串连接操作符(类似CONCAT())。||运算符是非标准扩展,已弃用;在 MySQL 的未来版本中将删除该支持。应用程序需要的地方应该调整使用标准 SQLOR运算符。例外:如果启用了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; -> 1a XOR b等同于(a AND (NOT b)) OR ((NOT a) and b)。