文档章节

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

没有更多内容

加载失败,请刷新页面

加载更多

设计模式之单例模式

单例模式核心:保证一个类只有一个对象 单例模式分为五种:懒汉式、饿汉式、双重检测锁式、静态内部类式、枚举式 五种模式的特点:懒汉式---线程安全,调用效率高,不能延时加载 饿汉式---线...

森林之下
今天
2
0
markdown语法

这篇博客是本人在使用markdown语法过程中,用于记录一些自己总是会忘记的语法,并且会持续更新; 如何增加批注/备注:>; 这是一条备注/引言 如何手动换行,行末两次空格;

BlackCanary
今天
3
0
redis 设置外网可访问

前提是你已经把redis的端口放到了防火墙计划中,  /sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT /etc/rc.d/init.d/iptables save 更改redis.conf 文件 bind 127.0.0.1prot...

时刻在奔跑
今天
2
0
css3隐藏滚动条

chrome 和Safari .element::-webkit-scrollbar { width: 0 } IE 10+ .element { -ms-overflow-style: none; } Firefox .element { overflow: -moz-scrollbars-none; } firefox这个没试过~啦啦......

呵呵闯
今天
3
0
Poco官方PPT_020-ErrorHandlingAndDebugging双语对照翻译

因工作需要用到这一块的功能,所以直接翻译了一下 此PPT来源于官方文件,地址https://pocoproject.org/documentation.html

CHONGCHEN
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部