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