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

作者: 杨呀 | 来源:发表于2019-04-30 12:39 被阅读2次
    MYSQL

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

    At 2019/4/26 By David.Yang

    运算逻辑

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

    WHERE

    boolean_expression

    OR

    boolean_expression

    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 = "大理国";

    条件过滤后,结果集如下

    同样,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 = "西夏";

    得到一下结果

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

    SQL

    SELECT

    *

    FROM

    students

    WHERE

    (

    nationality = "南宋"

    OR

    nationality = "西夏"

    )

    AND

    age >= 16;

    得到结果集如下

    注意,

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

    SQL

    SELECT

    *

    FROM

    students

    WHERE

    nationality = "南宋"

    OR

    nationality = "西夏"

    AND

    age >= 16;

    得到结果集如下

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

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

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

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

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

    相关文章

      网友评论

        本文标题:产品操作MySQL第7篇 – 运算符 - OR

        本文链接:https://www.haomeiwen.com/subject/rjgmnqtx.html