MySQL OR 运算符的用法
本文介绍了 MySQL 中如何在 WHERE 子句中使用 OR 运算符组合多个查询条件过滤查询数据。
当使用 SELECT
查询数据时,如果 WHERE
子句中有多个条件,可以根据需要使用 AND
, OR
, 或者 NOT
运算符将他们组合起来。本文主要介绍 OR
运算符。
OR 运算规则
OR
运算符是一个双目逻辑运算符,用来组合两个操作数。只要两个操作数中的一个为真时,结果就返回真,否则返回假或者 NULL
。
OR
运算符语法:
a AND b
其中,a
和 b
是 OR
的两个操作数,可以是表达式,也可以是值。
不像一些编程语言,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
子句查找姓氏为 ALLEN
或 DAVIS
的所有演员:
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 |
+----------+------------+-----------+---------------------+
运算符优先级
当组合表达式同时包含 AND
和 OR
运算符时,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
连接两个比较条件,过滤那些至少满足其中一个比较条件的记录行。