产品操作MySQL第7篇 – 运算符 - OR

产品操作MySQL第7篇 – 运算符 - OR

MYSQL

本资料为产品岗位作为日常工作参考,语言口语化

At 2019/4/26 By David.Yang

运算逻辑

OR运算符可以相互组合多个,在表达式任意一个为TRUE,即返回TRUE

WHERE

boolean_expression

OR

boolean_expression


产品操作MySQL第7篇 – 运算符 - OR


OR短路求值

使用OR进行条件运算时,多个逻辑条件会逐个运算,直到结果确定时,才会停止剩余部分的计算。

示例

-- TRUE OR NULL

SELECT 1 = 1 OR 1 / 0;

+----------------+

| 1 = 1 OR 1 / 0 |

+----------------+

| 1 |

+----------------+

1 row in set (0.00 sec)

OR连接两部分运算逻辑,1 = 1 和 1 / 0

第一部分 1 = 1返回TRUE;

所以真个OR逻辑运算结果为TRUE;

因为短路求值,MYSQL将不会再对剩余部分进行运算,1 / 0将不会进行求值;

注:

0被认为是false,非零被视为true。

OR运算符演示

我们来统计一下来自南宋和大理国的学生有多少?

SQL

SELECT

*

FROM

students

WHERE

nationality = "南宋"

OR

nationality = "大理国";

条件过滤后,结果集如下


产品操作MySQL第7篇 – 运算符 - OR


同样,OR可以组合2个以上的或逻辑运算。

运算符的优先级

正常优先级执行

我们的业务场景当中经常会出现AND OR等组合使用的情况,

MYSQL在处理AND和OR运算逻辑时有优先级,

处理AND运算符的逻辑时优先级高于OR,

所以会之后再进行OR运算符的计算。

示例

SQL

SELECT 1 = 1 OR 1 = 0 AND 0 / 1;

+--------------------------+

| 1 = 1 OR 1 = 0 AND 0 / 1 |

+--------------------------+

| 1 |

+--------------------------+

1 row in set (0.00 sec)

AND优先级高

ϒ对AND运算进行计算,1 = 0 AND 0 / 1,表达式结果转换为FALSE AND FALSE,所以AND逻辑返回FALSE。

ϒ对OR运算进行计算,1 = 1 OR FALSE,表达式转换为TRUE OR FALSE,所有返回TRUE

干预优先级执行

我们可以通过调整语法进行优先级的干预,使得执行优先级根据我们的意愿进行执行。

怎么来实现呢?

通过()。

示例

SQL

SELECT (1 = 1 OR 1 = 0) AND 0 / 1;

+----------------------------+

| (1 = 1 OR 1 = 0) AND 0 / 1 |

+----------------------------+

| 0 |

+----------------------------+

1 row in set (0.00 sec)

优先执行()内的运算逻辑

ϒ对括号内()逻辑进行运算,(1 = 1 OR 1 = 0),转化为TRUE OR FALSE,返回TRUE。

ϒ对AND逻辑进行运算,TRUE AND 0 / 1,转化为TRUE AND FALSE,返回FALSE;

优先级执行演示

获得来自南宋或者西夏的学生有哪些,在WHERE条件中使用OR运算逻辑来处理。

SQL

SELECT

*

FROM

students

WHERE

nationality = "南宋"

OR

nationality = "西夏";

得到一下结果


产品操作MySQL第7篇 – 运算符 - OR


在这个基础上,我们想再申明需要年龄大于等于16岁,通过年龄来进行一个与逻辑的运算。

SQL

SELECT

*

FROM

students

WHERE

(

nationality = "南宋"

OR

nationality = "西夏"

)

AND

age >= 16;

得到结果集如下


产品操作MySQL第7篇 – 运算符 - OR


注意,

将乳我们不加括号,不对优先级进行干预会得到一个什么样的结果集呢?

SQL

SELECT

*

FROM

students

WHERE

nationality = "南宋"

OR

nationality = "西夏"

AND

age >= 16;

得到结果集如下


产品操作MySQL第7篇 – 运算符 - OR


这是什么意思你通过上面的讲解应该很清楚吧。

这种查询方法的意思就是,你想要得到南宋的学生,或者西夏学生且年龄大于等于16的同学。

本篇主要在于对OR运算符的运算机制进行讲解,

帮助你明白OR运算时时如何工作的。

稍微注意一下AND和OR运算符的优先级问题。


分享到:


相關文章: