mysql-select语句执⾏顺序where语句执⾏顺序
html背景半透明代码⽬录
1.SELECT语句处理顺序
(1)from
(2)on
(3)join
mysql语句顺序(4)where
(5)group by (开始使⽤select中的别名,后⾯的语句中都可以使⽤)
(6)
(7)having
(8)select
(9)distinct
int函数怎么用详细步骤
(10)order by
(11)limit
rotate3d on过程解释:
google translate翻译下载第⼀步:⾸先对from⼦句中的前两个表执⾏⼀个笛卡尔乘积,此时⽣成虚拟表vt1(若有3个表以上,选择其中相对⼩的两表),求笛卡尔积。不论是什么类型的联接运算,⾸先都是执⾏交叉连接(CROSS JOIN)
第⼆步:接下来便是应⽤on筛选器,on中的逻辑表达式将应⽤到 vt1 中的各个⾏,筛选出满⾜on逻辑表达式的⾏,⽣成虚拟表 vt2
第三步:如果是outer join 那么这⼀步就将添加外部⾏,left outer jion 就把左表在第⼆步中过滤的添加进来,如果是right outer join 那么就将右表在第⼆步中过滤掉的⾏添加进来,这样⽣成虚拟表 vt3
第四步:如果 from ⼦句中的表数⽬多于两个表,那么就将vt3和第三个表连接从⽽计算笛卡尔乘积,⽣成虚拟表,该过程就是⼀个重复1-3的步骤,最终得到⼀个新的虚拟表 vt3。
第五步:应⽤where筛选器,对上⼀步⽣产的虚拟表引⽤where筛选器,⽣成虚拟表vt4,在对于包含outer join⼦句的查询,到底在on筛选器还是⽤where筛选器指定逻辑表达式呢?on中指定逻辑表达式只会筛选outer join表的,不会对from的表进⾏筛选 ,where是最终筛选。
第六步:group by ⼦句将中的唯⼀的值组合成为⼀组,得到虚拟表vt5。如果应⽤了group by,那么后⾯的所有步骤都只能得到的vt5的列或者是聚合函数(count、sum、avg等)。原因在于最终的结果集中只为每个组包含⼀⾏。这⼀点请牢记。
第七步:应⽤cube或者rollup选项,为vt5⽣成超组,⽣成vt6.
第⼋步:应⽤having筛选器,⽣成vt7。having筛选器是第⼀个也是为唯⼀⼀个应⽤到已分组数据的筛选器。
第九步:处理select⼦句。将vt7中的在select中出现的列筛选出来。⽣成vt8.
第⼗步:应⽤distinct⼦句,vt8中移除相同的⾏,⽣成vt9。事实上如果应⽤了group by⼦句那么distinct是多余的,原因同样在于,分组的时候是将列中唯⼀的值分成⼀组,同时只为每⼀组返回⼀⾏记录,那么所以的记录都将是不相同的。
第⼗⼀步:应⽤order by⼦句。按照order_by_condition排序vt9,此时返回的⼀个游标,⽽不是虚拟表。
sql是基于集合的理论的,集合不会预先对他的⾏排序,它只是成员的逻辑集合,成员的顺序是⽆关紧要的。对表进⾏排序的查询可以返回⼀个对象,这个对象包含特定的物理顺序的逻辑组织。这个对象就叫游标。正因为返回值是游标,那么使⽤order by ⼦句查询不能应⽤于表表达式。排序是很需要成本的,除⾮你必须要排序,否则最好不要指定order by,最后,在这⼀步中是第⼀个也是唯⼀⼀个可以使⽤select列表中别名的步骤。
第⼗⼆步: LIMIT:取出指定⾏的记录,产⽣虚拟表VT11, 并将结果返回。
java接口定义规范
2.where 后条件执⾏先后顺序
mysql:其条件执⾏顺序是 从左往右,⾃上⽽下 ,所以筛选出数据量少的条件放在最前⾯、⾛索引的放在前⾯orcale:其条件执⾏顺序是从右往左,⾃下⽽上

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。