• 【数据库】关于 mysql 的执行顺序


    Mysql 的执行顺序:

    1. from
    2. join
    3. on
    4. where
    5. group by (开始使用select中的别名,后面的语句中都可以使用)
    6. avg,sum...
    7. having
    8. select
    9. distinct
    10. order by

    from:

      从这个语句中可以发现,所有的查询语句都是从 from 中开始执行的,在执行过程中,每个步骤都会为下一个步骤生成一个虚表,这个虚表作为下个执行步骤的输入。其中,from 中表的合并是使用笛卡尔积。

    join:

      如果是outer join 那么这一步就将添加外部行,left outer jion 就把左表在第二步中过滤的添加进来,如果是right outer join 那么就将右表在第二步中过滤掉的行添加进来,这样生成虚拟表。

    on 和 where 的区别:

      on 逻辑表达式先执行,where但最大的区别是在包含outer join子句中的查询,on 条件是在生成临时表时连接的条件,而 where 是在临时表生成以后,再对临时表进行过滤的条件。可以这样理解,on 负责连接,where 负责筛选。

    举个例子:现在有一个学生表(班级,学号)和一个成绩表(学号,成绩)我现在需要返回一个x班级的全体学生的成绩,但是这个班级有几个学生缺考了,也就是说再成绩表中没有记录,为了得到我们预期的结果,首先我们需要用 on 指定学生和成绩表的关系(学生.姓名 = 成绩.姓名),此时没有参加们被 on 的逻辑表达过滤掉了,但是他们又会被 left join 找回来,此时就需要 where 进行最终筛选。

    order by:

      order by 返回的是一个游标,而不是虚拟表。游标是包含特定物理顺序的逻辑组织,而虚拟表的顺序是无关紧要的。因为排序很需要成本,所以除非是需要排序,否则最好别用。

    参考:

    https://www.cnblogs.com/yyjie/p/7788428.html

    https://blog.csdn.net/qq_28387069/article/details/78525975

  • 相关阅读:
    SQLServer三种自定义函数
    IE下必须点击一下页面空白的地方才可以激活onchange事件
    1234跨年总结(2014年总结)
    半透明背景(兼容IE)
    EF Power Tools
    ASP.NET MVC报错: Multiple types were found that match the controller named
    URI、URL和URN
    SQLServer中临时表与表变量的区别分析
    C#分部方法
    __flash__removeCallback 未定义错误
  • 原文地址:https://www.cnblogs.com/guangluwutu/p/11740883.html
Copyright © 2020-2023  润新知