### 12.4.3 逻辑运算符 [](<>)[](<>) [](<>) **表 12.5 逻辑运算符** | 姓名 | 描述 | | --- | --- | | [`和`,`&&`](logical-operators.html#operator_and) | 逻辑与 | | [`不是`,`!`](logical-operators.html#operator_not) | 否定价值 | | [`要么`,`||`](logical-operators.html#operator_or) | 逻辑或 | | [`异或`](logical-operators.html#operator_xor) | 逻辑异或 | 在 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 ``` - [](<>) [`不是`](logical-operators.html#operator_not),[`!`](logical-operators.html#operator_not) [](<>)[](<>) 逻辑非。评估为`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`. 这[`!`](logical-operators.html#operator_not), 运算符是一个非标准的 MySQL 扩展。从 MySQL 8.0.17 开始,此运算符已弃用;希望它在 MySQL 的未来版本中被删除。应调整应用程序以使用标准 SQL[`不是`](logical-operators.html#operator_not)操作员。 - [](<>) [`和`](logical-operators.html#operator_and),[`&&`](logical-operators.html#operator_and) [](<>)[](<>) 逻辑与。评估为`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 ``` 这[`&&`](logical-operators.html#operator_and), 运算符是一个非标准的 MySQL 扩展。从 MySQL 8.0.17 开始,此运算符已弃用;期望在 MySQL 的未来版本中删除对它的支持。应调整应用程序以使用标准 SQL[`和`](logical-operators.html#operator_and)操作员。 - [](<>) [`要么`](logical-operators.html#operator_or),[`||`](logical-operators.html#operator_or) [](<>)[](<>) 逻辑或。当两个操作数都是非`空值`,结果是`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-mode.html#sqlmode_pipes_as_concat)启用 SQL 模式,[`||`](logical-operators.html#operator_or)表示 SQL 标准的字符串连接运算符(如[`连接()`](string-functions.html#function_concat))。 这[`||`](logical-operators.html#operator_or), 运算符是一个非标准的 MySQL 扩展。从 MySQL 8.0.17 开始,此运算符已弃用;期望在 MySQL 的未来版本中删除对它的支持。应调整应用程序以使用标准 SQL[`要么`](logical-operators.html#operator_or)操作员。例外:如果满足以下条件,则不适用弃用[`PIPES_AS_CONCAT`](sql-mode.html#sqlmode_pipes_as_concat)已启用,因为在这种情况下,[`||`](logical-operators.html#operator_or)表示字符串连接。 - [](<>) [`异或`](logical-operators.html#operator_xor) [](<>) 逻辑异或。退货`空值`如果任一操作数是`空值`.对于非`空值`操作数,计算为`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)`.