MySQL OR[猿教程]

转载地址 MySQL OR|猿教程|

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

MySQL OR 运算符简介

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

A OR B

如果 A 和 B 都不为 NULL,则 OR 运算符在 A 或 B 非零时返回 1(真)。例如:

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

如果 A 和 B 都为零 (false),则 OR 运算符返回零。例如:

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

当 A 和/或 B 为 NULL 时,如果 A 或 B 非零,则 OR 运算符返回 1(真)。否则,它返回 NULL。例如:

SELECT 1 OR NULL, 0 OR NULL, NULL or NULL;
+-----------+-----------+--------------+
| 1 OR NULL | 0 OR NULL | NULL or NULL |
+-----------+-----------+--------------+
|         1 |      NULL |         NULL |
+-----------+-----------+--------------+
1 row in set (0.00 sec)

下表显示了组合 true(非零)、false(零)和 NULL 时 OR 运算符的结果:

TRUEFALSENULL
TRUETRUETRUETRUE
FALSETRUEFALSENULL
NULLTRUENULLNULL

MySQL OR 运算符和短路运算

与 AND 运算符一样,OR 运算符也是短路的。换句话说,一旦 MySQL 可以确定结果,它就会停止计算表达式的其余部分。例如:

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

因为表达式 1 = 1 总是返回 1,所以 MySQL 不会计算 1 / 0 表达式。如果发生这种情况,MySQL 会发出错误。

运算符优先级

当表达式同时包含 AND 和 OR 运算符时,MySQL 使用运算符优先级来确定运算符的评估顺序。 MySQL首先评估具有更高优先级的运算符。

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

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 = 1

要更改评估顺序,请使用括号。例如:

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

MySQL OR 运算符示例

我们将使用示例数据库中的customers表进行演示。

以下查询在 WHERE 子句中使用 OR 运算符来选择位于USA或France的所有客户:

SELECT    
	customername, 
	country
FROM    
	customers
WHERE country = 'USA' OR 
      country = 'France';
+------------------------------+---------+
| 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     |
...

以下示例使用 OR 运算符选择位于USA或France且信用额度大于 100,000 的客户。

SELECT   
	customername, 
	country, 
	creditLimit
FROM   
	customers
WHERE(country = 'USA'
		OR country = 'France')
	  AND creditlimit > 100000;
+------------------------------+---------+-------------+
| 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)

请注意,如果不使用括号,查询将返回位于USA的客户或France且信用额度大于 100,000 的客户。

SELECT    
    customername, 
    country, 
    creditLimit
FROM    
    customers
WHERE 
    country = 'USA'
    OR country = 'France'
    AND creditlimit > 100000;

+------------------------------+---------+-------------+
| 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 |
...

总结

  • OR 运算符组合两个布尔表达式,并在任一表达式为真时返回真。否则,它返回 false。
  • 如果表达式同时包含 AND 和 OR 运算符,MySQL 会在 AND 运算符之后评估 OR 运算符。
  • 使用括号更改求值顺序。

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值