文档章节

SQL执行顺序

海贼爱音乐
 海贼爱音乐
发布于 2017/08/17 09:11
字数 538
阅读 3
收藏 0
  1. from子句拼装来自不同数据源的数据
  2. where子句基于指定的条件对记录行进行筛选
  3. group by子句将数据分成多个组
  4. 使用聚合函数进行计算
  5. 使用having子句筛选分组
  6. 计算所有的表达式
  7. **select **的字段
  8. 使用order by对结果集进行排序

SQL查询处理的步骤序号:

(8)SELECT (9) DISTINCT (11) <TOP_specification> <select_list> (1) FROM <left_table>
(3) <join_type> JOIN <right_table> (2) ON <join_condition> (4) WHERE <where_condition> (5) GROUP BY <group_by_list> (6) WITH {CUBE | ROLLUP} (7) HAVING <having_condition> (10) ORDER BY <order_by_list>

以上每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只有最后一步生成的表才会给调用者。如果没有在查询中指定某一个子句,将跳过相应的步骤。
逻辑查询处理阶段简介:

  1. FROM:对FROM子句中的前两个表执行笛卡尔积(交叉联接),生成虚拟表VT1。
  2. ON:对VT1应用ON筛选器,只有那些使为真才被插入到VT2。
  3. OUTER (JOIN):如果指定了OUTER JOIN(相对于CROSS JOIN或INNER JOIN),保留表中未找到匹配的行将作为外部行添加到VT2,生成VT3。如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到处理完所有的表位置。
  4. WHERE:对VT3应用WHERE筛选器,只有使为true的行才插入VT4。
  5. GROUP BY:按GROUP BY子句中的列列表对VT4中的行进行分组,生成VT5。
  6. CUTE|ROLLUP:把超组插入VT5,生成VT6。
  7. HAVING:对VT6应用HAVING筛选器,只有使为true的组插入到VT7。
  8. SELECT:处理SELECT列表,产生VT8。
  9. DISTINCT:将重复的行从VT8中删除,产品VT9。
  10. ORDER BY:将VT9中的行按ORDER BY子句中的列列表顺序,生成一个游标(VC10)。
  11. TOP:从VC10的开始处选择指定数量或比例的行,生成表VT11,并返回给调用者。

本文转载自:http://www.cnblogs.com/qanholas/archive/2010/10/24/1859924.html

共有 人打赏支持
海贼爱音乐
粉丝 1
博文 87
码字总数 22611
作品 0
广州
CEO
数据库中间件 MyCAT 源码分析 —— 跨库两表Join

摘要: 原创出处 www.iocoder.cn/MyCAT/two-t… 「芋道源码」欢迎转载,保留摘要,谢谢! 本文主要基于 MyCAT 1.6.5 正式版 1. 概述 2. 主流程 3. ShareJoin 3.1 JoinParser 3.2 ShareJoin.pr...

芋道源码掘金Java群217878901
2017/10/03
0
0
oracle中Where子句顺序是否对SQL性能有影响

经常有人问到oracle中的Where子句的条件书写顺序是否对SQL性能有影响,我的直觉是没有影响,因为如果这个顺序有影响,Oracle应该早就能够做到自动优化,但一直没有关于这方面的确凿证据。在网...

疯狂的艺术家
2011/10/25
0
0
能保证顺序执行sql语句吗~求指点

有条4条sql语句,想按照一定的顺序执行;若这样写, sql.execute(sqlCreate.toString()) sql.execute(sqlDelete.toString()) sql.execute(sqlDrop.toString()) sql.execute(sqlRename.toStri......

天冰
2013/03/21
317
5
使用智能优化器提高Oracle的性能极限

消耗在准备新的SQL语句的时间是Oracle SQL语句执行时间的最重要的组成部分。但是通过理解Oracle内部产生执行计划的机制,你能够控制Oracle花费在评估连接顺序的时间数量,并且能在大体上提高...

晨曦之光
2012/03/09
0
0
sql语句中各个部分函数执行的顺序

首先分析一下SQL: 这条SQL语句是否可以有下面两种理解呢   (1)先从Student表中选出age>20的数据,然后从这些数据中选择前面的10条数据。   (2)先从Student表中选出前10条数据,然后...

zhangbs
2016/08/22
63
0

没有更多内容

加载失败,请刷新页面

加载更多

TypeScript基础入门之高级类型的字符串字面量类型

转发TypeScript基础入门之高级类型的字符串字面量类型 高级类型 字符串字面量类型 字符串字面量类型允许你指定字符串必须的固定值。 在实际应用中,字符串字面量类型可以与联合类型,类型保护...

durban
18分钟前
2
0
iOS权限授权添加

<!-- 相册 --> <key>NSPhotoLibraryUsageDescription</key> <string>App需要您的同意,才能访问相册</string> <!-- 相册写入 --> <key>NSPhotoLibraryAddUsageDescription</key> <string>App......

RainOrz
22分钟前
1
0
支配树(Dominator Tree)

MAT中的支配树 在使用MAT分析项目的内存泄漏问题时,其中有一个支配树(Dominator)视图。如果我们把Java对象之间的引用关系看做一张有向图(可以存在环)的话,对象的支配树体现了对象之间的...

akane_oimo
24分钟前
1
0
xshell官网下载及安装(免费版本)

百度搜索xshell,点击xshell官网下载链接,如图 然后点击下图的按钮 点击Latest Products,可以下载最新版本,选择要下载的版本,点击下载 选择上面红框里面的,并填写内容,submit之后会有邮...

曾大大胖
29分钟前
2
0
Android 调用系统分享文字、图片、文件,可直达微信、朋友圈、QQ、QQ空间、微博

兼容SDK 18以上的系统,直接调用系统分享功能,分享文本、图片、文件到第三方APP,如:微信、QQ、微博等 因为偷懒,可直达微信、朋友圈、QQ、QQ空间、微博的分享仅写了图片分享的,其他的文本...

她叫我小渝
30分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部