12.3.3 逻辑运算符
table12.4 逻辑运算符
Name | Description |
---|---|
AND, && | Logical AND |
NOT, ! | Negates value |
OR, || | Logical OR |
XOR | Logical XOR |
在 SQL 中,所有逻辑运算符的求值结果均为TRUE
,FALSE
或NULL
(UNKNOWN
)。在 MySQL 中,这些实现为 1(TRUE
),0(FALSE
)和NULL
。尽管其中有些服务器可能会返回TRUE
的任何非零值,但大多数情况对于不同的 SQL 数据库服务器来说是常见的。
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
,因为该 table 达式的求值方式与(!1)+1
相同。
逻辑与。如果所有操作数均为非零而不是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
逻辑或。当两个操作数都不为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
Note
如果启用了PIPES_AS_CONCAT SQL 模式,则||table 示 SQL 标准字符串连接运算符(如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
在 math 上等于(a AND (NOT b)) OR ((NOT a) and b)
。