文档章节

SQL执行顺序

海贼爱音乐
 海贼爱音乐
发布于 2017/08/17 09:11
字数 538
阅读 2
收藏 0
点赞 0
评论 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
[MySql]关于sql和mysql对于别名不能调用的一些理解

由于有部分语句别名不能调用原来是由于别名机制不同引起的,为了避免下次发生就整理了一下sql和mysql执行顺序发现内部机制是一样的,最大区别是在别名的引用上 在写sql的时候,由于有部分语句...

NateHuang
2016/11/17
25
0
用二叉树的后序遍历来看oracle执行计划的执行顺序

我们先用一个小表来,来说明一下,oracle执行计划该注意哪些地方。 hr@ORCL> set autotrace traceonlyhr@ORCL> select * from t; 模糊比较两条sql的优劣时,建议先查看以下两个值:Cost (%CP...

长平狐
2012/09/19
90
0
SQL那些你不知道的事--你的困惑就在这里

很多程序员视 SQL 为洪水猛兽。SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言、面向对象的程序语言、甚至是函数语言(尽管有些人认为 SQL 语言也是一种函数...

SuperPcf
2015/11/30
159
1
数据库查询语句执行顺序

大神的总结: http://www.cnblogs.com/knowledgesea/p/4177830.html 参考:《Microsoft SQL Server 2008技术内幕:T-SQL查询》 查询语句的执行顺序: 1、FROM 子句:执行顺序为从后往前、从右...

Romanceling
2016/04/27
117
0
致sql初学者

很多程序员视 SQL 为洪水猛兽。SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言、面向对象的程序语言、甚至是函数语言(尽管有些人认为 SQL 语言也是一种函数...

hello菜bird
2016/02/29
72
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

关于DCL双重锁失效及解决方案

关于DCL双重锁失效及解决方案 Double Check Lock (DCL)实现单例 DCL 方式实现单例的优点是既能够在需要时才初始化单例,又能够保证线程安全,且单例对象初始化后调用getInstance方法不进行...

DannyCoder
9分钟前
0
0
PowerDesigner 16.5 安装配置

PowerDesigner16.5破解版是一款业内领先且开发人员常用的数据库建模工具,PowerDesigner可以从物理和概念两个层面设计数据库,方便用户制作处清晰直观的数据流程图和结构模型,欢迎有需要的朋...

Gibbons
34分钟前
0
0
前端Tips: 创建, 发布自己的 Vue UI 组件库

创建, 发布自己的 Vue UI 组件库 前言 在使用 Vue 进行日常开发时, 我们经常会用到一些开源的 UI 库, 如: Element-UI, Vuetify 等. 只需一行命令, 即可方便的将这些库引入我们当前的项目: n...

ssthouse_hust
今天
1
0
大数据教程(2.13):keepalived+nginx(多主多活)高可用集群搭建教程【自动化脚本】

上一章节博主为大家介绍了目前大型互联网项目的keepalived+nginx(主备)高可用系统架构体系,相信大家应该看了博主的文章对keepalived/nginx技术已经有一定的了解,在本节博主将为大家分享k...

em_aaron
今天
4
0
Git 2.18版本发布:支持Git协议v2,提升性能

在最新的官方 Git 客户端正式版2.18中添加了对 Git wire 协议 v2 的支持,并引入了一些性能与 UI 改进的新特性。在 Git 的核心团队成员 Brandon Williams 公开宣布这一消息前几周,Git 协议 ...

六库科技
今天
0
0
Java8新特性之接口

在JDK8以前,我们定义接口类中,方法都是抽象的,并且不能存在静态方法。所有的方法命名规则基本上都是 public [返回类型] [方法名](参数params) throws [异常类型] {}。 JDK8为接口的定义带...

developlee的潇洒人生
今天
0
0
aop + annotation 实现统一日志记录

aop + annotation 实现统一日志记录 在开发中,我们可能需要记录异常日志。由于异常比较分散,每个 service 方法都可能发生异常,如果我们都去做处理,会出现很多重复编码,也不好维护。这种...

长安一梦
今天
2
0
将博客搬至CSDN

AHUSKY
今天
2
0
Python web框架Django学习(1)

1.Django简介 (1)Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。Django是一个开放源代码的Web应用框架,由Python写成。 (2...

十年磨一剑3344
今天
0
0
Databook-数据之书

Databook-数据之书 用于数据分析的Jupyter Notebooks。 不需购买服务器,快速开始自己的数据分析过程。 源码:https://github.com/openthings/databook 作者:openthings,https://github.co...

openthings
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部