关于sql的执行顺序
2015-12-29 11:28
204 查看
标准sql的解析顺序为
1)FROM子句,组装来自不同数据源的数据
2)WHERE子句 基于制定的条件对记录进行筛选
3)GROUP BY 子句将数据划分为多个分组
4)使用聚合函数进行计算
5) 使用HAVING子句将数据划分为多个分组
6)计算所有的表达式
7) 使用ORDER BY对结果集进行排序
二、执行顺序
1. FROM:对FROM子句中前两个表执行笛卡尔积生成虚拟表vt1
2. ON: 对vt1表应用ON筛选器只有满足 join_condition 为真的行才被插入vt2
3. OUTER(join):如果指定了 OUTER JOIN保留表(preserved table)中未找到的行将行作为外部行添加到vt2,生成t3,如果from包含两个以上表,则对上一个联结生成的结果表和下一个表重复执行步骤和步骤直接结束。
4. WHERE:对vt3应用 WHERE 筛选器只有使 where_condition 为true的行才被插入vt4
5. GROUP BY:按GROUP BY子句中的列列表对vt4中的行分组生成vt5
6. CUBE|ROLLUP:把超组(supergroups)插入vt6,生成vt6
7. HAVING:对vt6应用HAVING筛选器只有使 having_condition 为true的组才插入vt7
8. SELECT:处理select列表产生vt8
9. DISTINCT:将重复的行从vt8中去除产生vt9
10. ORDER BY:将vt9的行按order by子句中的列列表排序生成一个游标vc10
11. TOP:从vc10的开始处选择指定数量或比例的行生成vt11 并返回调用者
1)FROM子句,组装来自不同数据源的数据
2)WHERE子句 基于制定的条件对记录进行筛选
3)GROUP BY 子句将数据划分为多个分组
4)使用聚合函数进行计算
5) 使用HAVING子句将数据划分为多个分组
6)计算所有的表达式
7) 使用ORDER BY对结果集进行排序
二、执行顺序
1. FROM:对FROM子句中前两个表执行笛卡尔积生成虚拟表vt1
2. ON: 对vt1表应用ON筛选器只有满足 join_condition 为真的行才被插入vt2
3. OUTER(join):如果指定了 OUTER JOIN保留表(preserved table)中未找到的行将行作为外部行添加到vt2,生成t3,如果from包含两个以上表,则对上一个联结生成的结果表和下一个表重复执行步骤和步骤直接结束。
4. WHERE:对vt3应用 WHERE 筛选器只有使 where_condition 为true的行才被插入vt4
5. GROUP BY:按GROUP BY子句中的列列表对vt4中的行分组生成vt5
6. CUBE|ROLLUP:把超组(supergroups)插入vt6,生成vt6
7. HAVING:对vt6应用HAVING筛选器只有使 having_condition 为true的组才插入vt7
8. SELECT:处理select列表产生vt8
9. DISTINCT:将重复的行从vt8中去除产生vt9
10. ORDER BY:将vt9的行按order by子句中的列列表排序生成一个游标vc10
11. TOP:从vc10的开始处选择指定数量或比例的行生成vt11 并返回调用者
相关文章推荐
- SqlServer 转mysql
- DMP导入导出
- MySQL的if,case语句使用总结
- MySQL 执行SQL脚本 报ERROR 1231 (42000)的解决办法
- redis使用规范
- mysql 转SqlServer
- 使用WITH AS提高性能简化嵌套SQL
- mysql,mybatis使用中遇到的类型转化的问题
- 将raw里面的数据库文件写入到data中
- redis上tomcat和session共享的问题
- 【Hibernate3】(3)数据库生成策略
- oracle用户解锁
- windows 下安装mysql解压缩包
- window 下PHP redis扩展插件
- Sql Server 数据库恢复和日志文件的详细介绍
- remap_tablespace修改数据库表空间
- 数据库的增删改查
- LoadRunner测试MySql
- MongoDB基本管理命令
- xp/win7中系统安装memcached服务,卸载memcached服务,以及删除memcached服务