MySQL语法顺序及执⾏顺序
⼀、书写顺序gba模拟器
1select[distinct]
2from
3join
4on
5where
6group by
7having
8union
9order by
10 limit
⼆、执⾏顺序
1from
2on
3join
4where
5group by (可以使⽤select中的别名,后⾯的语句中都可以使⽤)java在线观看
6having
7select
8distinct
9union
python中的断言是什么意思10order by
11 limit
以上每个步骤都会产⽣⼀个虚拟表,该虚拟表被⽤作下⼀个步骤的输⼊。这些虚拟表对调⽤者(客户端应⽤程序或者外部查询)不可⽤。只有最后⼀步⽣成的表才会会给调⽤者。如果没有在查询中指定某⼀个⼦句,将跳过相应的步骤。
1、⾸先对from⼦句中的前两个表执⾏⼀个笛卡尔乘积(交叉联接),此时⽣成虚拟表 VT1(选择相对⼩的表做基础表);
2、应⽤on筛选器,on 中的逻辑表达式将应⽤到 VT1 中的各个⾏,筛选出满⾜on逻辑表达式的⾏,⽣成虚拟表 VT2;
3、如果是外连接,就将添加外部⾏;如果是左连接,就把左表在第⼆步中过滤的添加进来; 如果是右连接,就将右表在第⼆步中过滤掉的⾏添加进来,这样⽣成虚拟表 VT3 ;
如果 from ⼦句中的表数⽬多余两个表,那么就将VT3和第三个表连接从⽽计算笛卡尔乘积,⽣成虚拟表,该过程就是⼀个重复1-3的步骤,最终得到⼀个新的虚拟表 VT3;
4、对 VT3 应⽤ WHERE 筛选器,只有使为 true 的⾏才插⼊ VT4。
mysql语句顺序
5、group by ⼦句将中的唯⼀的值组合成为⼀组,得到虚拟表VT5。如果应⽤了group by,那么后⾯的所有步骤都只能得到的VT5的列或者是聚合函数(count、sum、avg等)。原因在于最终的结果集中只为每个组包含⼀⾏;
pow函数的头文件6、应⽤cube或者rollup选项,为VT5⽣成超组,⽣成VT6.
7、应⽤having筛选器,⽣成VT7。having筛选器是第⼀个也是为唯⼀⼀个应⽤到已分组数据的筛选器
8、处理select⼦句。将VT7中的在select中出现的列筛选出来。⽣成VT8.
hover选择器的作用9、应⽤distinct⼦句,VT8中移除相同的⾏,⽣成VT9。事实上如果应⽤了group by⼦句那么distinct是多余的;
10、应⽤order by⼦句。按照order_by_condition排序VT9,此时返回的⼀个游标,⽽不是虚拟表。sql是基于集合的理论的,集合不会预先对他的⾏排序,它只是成员的逻辑集合,成员的顺序是⽆关紧要的。对表进⾏排序的查询可以返回⼀个对象,这个对象包含特定的物理顺序的逻辑组织。这个对象就叫游标。正因为返回值是游标,那么使⽤order by ⼦句查询不能应⽤于表表达式;
11、应⽤limit,从游标开始处选择指定数量或⽐例的⾏,⽣成表 TT11,并返回给⽤户。

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