MySQL OR Operator

摘要:在本教程中,您将学习如何使用 MySQL OR运算符来组合布尔表达式。

MySQL OR 运算符简介

MySQL OR运算符是组合两个布尔表达式的逻辑运算符。

A OR BCode 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 就会发出错误。

运算符优先级

当表达式同时包含ANDOR运算符时,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。
  • 如果表达式同时包含ANDOR运算符,MySQL 将在AND运算符之后计算OR运算符。
  • 使用括号更改计算顺序。
本教程有帮助吗?