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

Mysql 的执行顺序:html

  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:sql

  从这个语句中能够发现,全部的查询语句都是从 from 中开始执行的,在执行过程当中,每一个步骤都会为下一个步骤生成一个虚表,这个虚表做为下个执行步骤的输入。其中,from 中表的合并是使用笛卡尔积。.net

 

join:htm

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

 

on 和 where 的区别:排序

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

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

 

order by:select

  order by 返回的是一个游标,而不是虚拟表。游标是包含特定物理顺序的逻辑组织,而虚拟表的顺序是可有可无的。由于排序很须要成本,因此除非是须要排序,不然最好别用。qq

 

参考:

http://www.javashuo.com/article/p-hpflcnvm-cq.html

http://www.javashuo.com/article/p-xqpgxwmz-mm.html

相关文章
相关标签/搜索