• 欢迎访问金笔头博客,这是一个菜鸟(伪)程序员的自留地,欢迎访问我的github:点击进入

Oracle笔记(2)SQL语句的执行顺序

oracle eason 1929次浏览 3个评论 扫描二维码

1、from子句组装来自不同数据源的数据;

2、where子句基于指定的条件对记录行进行筛选;

3、group by子句将数据划分为多个分组;

4、使用聚集函数进行计算;

5、使用having子句筛选分组;

6、计算所有的表达式;

7、select 的字段;

8、使用order by对结果集进行排序。

在SQL语句中,第一个被处理的子句是FROM,而不是第一出现的SELECT。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筛选器,只有那些值为真才被插入到TV2。

3、 OUTER (JOIN):如果指定了OUTER JOIN(相对于CROSS JOIN或INNER JOIN),保留表中未找到匹配的行将作为外部行添加到VT2,生成TV3。如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到处理完所有的表位置。

4、 WHERE:对TV3应用WHERE筛选器,只有使为true的行才插入TV4。

5、 GROUP BY:按GROUP BY子句中的列列表对TV4中的行进行分组,生成TV5。

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的开始处选择指定数量或比例的行,生成表TV11,并返回给调用者。


金笔头博客, 版权所有丨如未注明 , 均为原创, 转载请注明Oracle笔记(2)SQL语句的执行顺序
喜欢 (1)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(3)个小伙伴在吐槽
  1. 4WMHTH Terrific work! This is the type of info that should be shared across the web. Disgrace on Google for no longer positioning this put up higher! Come on over and discuss with my web site. Thank you =)
    crorkservice fiverr2016-02-04 08:43 Reply Windows XP | Internet Explorer 6.0
  2. Wow, great article post.Really looking forward to read more. Want more.
    cum twice2016-02-03 05:03 Reply Windows 7 | Chrome 4.0.221.7
  3. Great article post.Really thank you! Awesome.
    lesbian bukkake2016-01-02 17:06 Reply Windows XP | Internet Explorer 7.0