MySQL OR 运算符的用法

本文介绍了 MySQL 中如何在 WHERE 子句中使用 OR 运算符组合多个查询条件过滤查询数据。

当使用 SELECT 查询数据时,如果 WHERE 子句中有多个条件,可以根据需要使用 AND, OR, 或者 NOT 运算符将他们组合起来。本文主要介绍 OR 运算符。

OR 运算规则

OR 运算符是一个双目逻辑运算符,用来组合两个操作数。只要两个操作数中的一个为真时,结果就返回真,否则返回假或者 NULL

OR 运算符语法:

a AND b

其中,abOR 的两个操作数,可以是表达式,也可以是值。

不像一些编程语言,MySQL 中没有布尔类型,OR 的运算结果是 1, 0, 或着 NULL

OR 运算符的运算规则如下:

  • 如果两个操作数中至少一个操作数为 1 (TURE),则 OR 运算的结果为 1

    SELECT 1 OR 1, 1 OR 0, 1 OR NULL, 2 OR 0;
    
    +--------+--------+-----------+--------+
    | 1 OR 1 | 1 OR 0 | 1 OR NULL | 2 OR 0 |
    +--------+--------+-----------+--------+
    |      1 |      1 |         1 |      1 |
    +--------+--------+-----------+--------+
  • 如果两个操作数都为 0 (FALSE),则 OR 运算的结果为 0

    SELECT 0 OR 0;
    
    +--------+
    | 0 OR 0 |
    +--------+
    |      0 |
    +--------+
  • 如果两个操作数有一个为 NULL,另一个为 0 (FALSE) 或者 NULL,则 OR 运算的结果为 NULL

    SELECT NULL OR 0, NULL or NULL;
    
    +-----------+--------------+
    | NULL OR 0 | NULL or NULL |
    +-----------+--------------+
    |      NULL |         NULL |
    +-----------+--------------+
  • 两个操作数的前后顺序不影响 OR 操作符的运算结果。

    SELECT 1 OR 0, 0 OR 1, 1 OR NULL, NULL OR 1, 0 OR NULL, NULL OR 0;
    
    +--------+--------+-----------+-----------+-----------+-----------+
    | 1 OR 0 | 0 OR 1 | 1 OR NULL | NULL OR 1 | 0 OR NULL | NULL OR 0 |
    +--------+--------+-----------+-----------+-----------+-----------+
    |      1 |      1 |         1 |         1 |      NULL |      NULL |
    +--------+--------+-----------+-----------+-----------+-----------+

下表总结了 OR 运算符对不同操作数的运算结果:

1 0 NULL
1 1 1 1
0 1 0 NULL
NULL 1 NULL NULL

WHERE 子句中的 OR

WHERE 子句中, OR 连接两个比较条件。一般的形式如下:

column_name1 = value1 OR column_name2 = value2

WHERE 子句中的 OR 过滤那些的记录行,她们只需要满足两个比较条件中的其中一个即可。

也就是说,如果数据表中的记录行,只要满足字段 column_name1 的值为 value1 或者 column_name2 的值为 value2,就是符合条件的记录行。

MySQL OR 运算符实例

在以下实例中,我们使用 Sakila 示例数据库中的演员表 actor 作为演示。

以下查询使用 WHERE 子句查找姓氏为 ALLENDAVIS 的所有演员:

SELECT
    *
FROM
    actor
WHERE
    last_name = 'ALLEN' OR last_name = 'DAVIS';
+----------+------------+-----------+---------------------+
| actor_id | first_name | last_name | last_update         |
+----------+------------+-----------+---------------------+
|      118 | CUBA       | ALLEN     | 2006-02-15 04:34:33 |
|      145 | KIM        | ALLEN     | 2006-02-15 04:34:33 |
|      194 | MERYL      | ALLEN     | 2006-02-15 04:34:33 |
|        4 | JENNIFER   | DAVIS     | 2006-02-15 04:34:33 |
|      101 | SUSAN      | DAVIS     | 2006-02-15 04:34:33 |
|      110 | SUSAN      | DAVIS     | 2006-02-15 04:34:33 |
+----------+------------+-----------+---------------------+

运算符优先级

当组合表达式同时包含 ANDOR 运算符时,MySQL 使用运算符优先级来确定运算符的计算顺序。MySQL 首先运算具有更高优先级的运算符。

由于 AND 运算符的优先级高于 OR 运算符,因此 MySQL 在 AND 运算符之前评估运算 OR 符。例如:

SELECT 1 OR 0 AND 0;
+--------------+
| 1 OR 0 AND 0 |
+--------------+
|            1 |
+--------------+
1 row in set (0.00 sec)

运算步骤如下:

  1 OR 0 AND 0
= 1 OR (0 AND 0)
= 1 OR 0
= 1

如果要更改计算顺序,请使用括号。例如:

SELECT (1 OR 0) AND 0;
+----------------+
| (1 OR 0) AND 0 |
+----------------+
|              0 |
+----------------+
1 row in set (0.00 sec)

结论

本文通过实例介绍了 MySQL 中 OR 运算符的语法和用法。 OR 运算符的用法要点如下:

  • OR 是双目运算符,需要两个布尔操作数。
  • 如果两个操作数中至少一个操作数为 1 (TURE),则 OR 运算的结果为 1
  • 如果两个操作数都为 0 (FALSE),则 OR 运算的结果为 0
  • 如果两个操作数有一个为 NULL,另一个为 0 (FALSE) 或者 NULL,则 OR 运算的结果为 NULL
  • 两个操作数的前后顺序不影响 OR 操作符的运算结果。
  • AND 运算符的优先级高于 OR。使用括号更改计算顺序。
  • WHERE 子句中的 OR 连接两个比较条件,过滤那些至少满足其中一个比较条件的记录行。