摘要:在本教程中,您将学习如何使用 MySQL OR
运算符来组合布尔表达式。
MySQL OR 运算符简介
MySQL OR
运算符是组合两个布尔表达式的逻辑运算符。
A OR B
Code language: SQL (Structured Query Language) (sql)
如果 A 和 B 都不为 NULL,则当 A 或 B 不为零时,OR 运算符返回 1 (true)。例如:
SELECT 1 OR 1, 1 OR 0, 0 OR 1;
Code language: SQL (Structured Query Language) (sql)
+--------+--------+--------+
| 1 OR 1 | 1 OR 0 | 0 OR 1 |
+--------+--------+--------+
| 1 | 1 | 1 |
+--------+--------+--------+
1 row in set (0.00 sec)
Code language: plaintext (plaintext)
如果 A 和 B 都为零 (假),则 OR 运算符返回零。例如:
SELECT 0 OR 0;
Code language: SQL (Structured Query Language) (sql)
+--------+
| 0 OR 0 |
+--------+
| 0 |
+--------+
1 row in set (0.00 sec)
Code language: plaintext (plaintext)
当 A 和/或 B 为 NULL 时,如果 A 或 B 不为零,则 OR 运算符返回 1 (true)。否则,返回 NULL。例如:
SELECT 1 OR NULL, 0 OR NULL, NULL or NULL;
Code language: SQL (Structured Query Language) (sql)
+-----------+-----------+--------------+
| 1 OR NULL | 0 OR NULL | NULL or NULL |
+-----------+-----------+--------------+
| 1 | NULL | NULL |
+-----------+-----------+--------------+
1 row in set (0.00 sec)
Code language: plaintext (plaintext)
下表显示了组合 true(非零)、false(零)和 NULL 时OR
运算符的结果:
真的 | 错误的 | 无效的 | |
真的 | 真的 | 真的 | 真的 |
错误的 | 真的 | 错误的 | 无效的 |
无效的 | 真的 | 无效的 | 无效的 |
MySQL OR 运算符和短路评估
与AND
运算符一样, OR
运算符也是短路的。换句话说,MySQL 一旦确定结果就停止计算表达式的其余部分。例如:
SELECT 1 = 1 OR 1 / 0;
Code language: SQL (Structured Query Language) (sql)
+----------------+
| 1 = 1 OR 1 / 0 |
+----------------+
| 1 |
+----------------+
1 row in set (0.00 sec)
Code language: plaintext (plaintext)
由于表达式1 = 1
始终返回 1,因此 MySQL 不会计算 1 / 0 表达式。如果这样做,MySQL 就会发出错误。
运算符优先级
当表达式同时包含AND
和OR
运算符时,MySQL 使用运算符优先级来确定运算符的计算顺序。 MySQL 首先评估优先级较高的运算符。
由于AND
运算符的优先级高于OR
运算符,因此 MySQL 在OR
运算符之前计算AND
运算符。例如:
SELECT 1 OR 0 AND 0;
Code language: SQL (Structured Query Language) (sql)
+--------------+
| 1 OR 0 AND 0 |
+--------------+
| 1 |
+--------------+
1 row in set (0.00 sec)
Code language: plaintext (plaintext)
怎么运行的。
1 OR 0 AND 0 = 1 OR 0 = 1
要更改计算顺序,请使用括号。例如:
SELECT (1 OR 0) AND 0;
Code language: SQL (Structured Query Language) (sql)
+----------------+
| (1 OR 0) AND 0 |
+----------------+
| 0 |
+----------------+
1 row in set (0.00 sec)
Code language: plaintext (plaintext)
怎么运行的。
(1 OR 0) AND 0 = 1 AND 0 = 0
MySQL OR 运算符示例
我们将使用示例数据库中的customers
表进行演示。

以下查询在WHERE
子句中使用OR
运算符来选择位于美国或法国的所有客户:
SELECT
customername,
country
FROM
customers
WHERE country = 'USA' OR
country = 'France';
Code language: SQL (Structured Query Language) (sql)
+------------------------------+---------+
| customername | country |
+------------------------------+---------+
| Atelier graphique | France |
| Signal Gift Stores | USA |
| La Rochelle Gifts | France |
| Mini Gifts Distributors Ltd. | USA |
| Mini Wheels Co. | USA |
| Land of Toys Inc. | USA |
| Saveley & Henriot, Co. | France |
| Muscle Machine Inc | USA |
| Diecast Classics Inc. | USA |
...
Code language: plaintext (plaintext)
以下示例使用OR
运算符选择位于美国或法国且信用额度大于 100,000 的客户。
SELECT
customername,
country,
creditLimit
FROM
customers
WHERE(country = 'USA'
OR country = 'France')
AND creditlimit > 100000;
Code language: SQL (Structured Query Language) (sql)
+------------------------------+---------+-------------+
| customername | country | creditLimit |
+------------------------------+---------+-------------+
| La Rochelle Gifts | France | 118200.00 |
| Mini Gifts Distributors Ltd. | USA | 210500.00 |
| Land of Toys Inc. | USA | 114900.00 |
| Saveley & Henriot, Co. | France | 123900.00 |
| Muscle Machine Inc | USA | 138500.00 |
| Diecast Classics Inc. | USA | 100600.00 |
| Collectable Mini Designs Co. | USA | 105000.00 |
| Marta's Replicas Co. | USA | 123700.00 |
| Mini Classics | USA | 102700.00 |
| Corporate Gift Ideas Co. | USA | 105000.00 |
| Online Diecast Creations Co. | USA | 114200.00 |
+------------------------------+---------+-------------+
11 rows in set (0.00 sec)
Code language: plaintext (plaintext)
请注意,如果不使用括号,查询将返回信用额度大于 100,000 的位于美国的客户或位于法国的客户。
SELECT
customername,
country,
creditLimit
FROM
customers
WHERE
country = 'USA'
OR country = 'France'
AND creditlimit > 100000;
Code language: SQL (Structured Query Language) (sql)
+------------------------------+---------+-------------+
| customername | country | creditLimit |
+------------------------------+---------+-------------+
| Signal Gift Stores | USA | 71800.00 |
| La Rochelle Gifts | France | 118200.00 |
| Mini Gifts Distributors Ltd. | USA | 210500.00 |
| Mini Wheels Co. | USA | 64600.00 |
| Land of Toys Inc. | USA | 114900.00 |
| Saveley & Henriot, Co. | France | 123900.00 |
| Muscle Machine Inc | USA | 138500.00 |
| Diecast Classics Inc. | USA | 100600.00 |
| Technics Stores Inc. | USA | 84600.00 |
| American Souvenirs Inc | USA | 0.00 |
...
Code language: plaintext (plaintext)
概括
OR
运算符组合两个布尔表达式,并在任一表达式为 true 时返回 true。否则,返回 false。- 如果表达式同时包含
AND
和OR
运算符,MySQL 将在AND
运算符之后计算OR
运算符。 - 使用括号更改计算顺序。
本教程有帮助吗?