SQL语句各子句的执行顺序

转载 2012年03月23日 01:11:24

一个SQL会包含很多个子句,在写SQL时,理解SQL个部分子句执行的优先级非常重要,否则可能会导致简单的SQL变成多个嵌套的SQL,更可能导致错误的返回结果。

下面通过一个例子说明各子句的优先级:


select a,b,count(sum(c)) over ()
from t
where t.d=1
start with e is not null connect by prior f=g
group by a,b
having sum(c)>100
order by 3;

这个SQL包含:
1. SELECT 子句
2. group by子句
3. 分析函数
4. from子句
5. where子句
6. start with...connect by子句
7. having子句
8. order by子句


对于FROM子句,可以简单理解为表或者扫描扫描(如果涉及到多表关联就复杂了,这里不讨论);
对于SELECT子句,从执行计划看是在最后执行的,我把它理解为返回数据给用户,而不是读取数据,读取数据是在FROM这个步骤执行的,所以我认为顺序是:

4 -> 6 -> 5 -> 2 -> 7 -> 3 -> 8 -> 1

from子句 -> start with...connect by子句 -> where子句 -> group by子句 -> having子句 -> 分析函数 -> order by子句 -> SELECT 子句

要注意,以上的顺序只代表一般情况,不一定所有的情况都按照这个执行顺序,尤其是同时有group by和order by时。例如:

select a,b,count(sum(c)) over ()
from t
where t.d=1
start with e is not null connect by prior f=g
group by a,b
having sum(c)>100
order by a;

这个SQL的执行顺序就有可能是:4->6->5-> 2 + 8 ->7->3->1。实际执行顺序以执行计划为准,但是这里特别要记住的是不管SQL怎么样,以下部分的优先级是确定的:

start with...connect by子句 -> where子句 -> group by子句 -> having子句 -> 分析函数

SELECT语句逻辑执行顺序,你知道吗?

这不是一个什么多深的技术问题,多么牛叉的编程能力。这跟一个人的开发能力也没有非常必然的直接关系,但是知道这些会对你的SQL编写,排忧及优化上会有很大的帮助。它不是一个复杂的知识点,但是一个非常基础的S...
  • lihui_830501
  • lihui_830501
  • 2014年04月23日 00:29
  • 4272

要提高SQL查询效率where语句条件的先后次序应如何写

我们要做到不但会写SQL,还要做到写出性能优良的SQL语句。(1)选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中...
  • sforiz
  • sforiz
  • 2010年03月04日 12:17
  • 38582

SQL语句各子句的执行顺序

一个SQL会包含很多个子句,在写SQL时,理解SQL个部分子句执行的优先级非常重要,否则可能会导致简单的SQL变成多个嵌套的SQL,更可能导致错误的返回结果。 下面通过一个例子说明各子句的优先级...
  • wozengcong
  • wozengcong
  • 2013年08月30日 23:16
  • 513

oracle语句执行顺序

SQL Select语句完整的执行顺序:1、from子句组装来自不同数据源的数据;2、where子句基于指定的条件对记录行进行筛选;3、group by子句将数据划分为多个分组;4、使用聚集函数进行计...
  • bingmeng
  • bingmeng
  • 2010年10月01日 11:26
  • 1231

关于sql和MySQL的语句执行顺序(必看!!!)

今天遇到一个问题就是mysql中insert into 和update以及delete语句中能使用as别名吗?目前还在查看,但是在查阅资料时发现了一些有益的知识,给大家分享一下,就是关于sql以及My...
  • u014044812
  • u014044812
  • 2016年03月29日 12:15
  • 25504

编写SQL查询的关键—SQL语句的执行顺序

Normal 0 7.8 磅 0 2
  • newjueqi
  • newjueqi
  • 2009年11月09日 16:41
  • 2485

高级sql学习——with子句!!!

使用WITH AS 语句可以为一个子查询语句块定义一个名称,使用这个子查询名称可以在查询语句的很多地方引用这个子查询。Oracle 数据库像对待内联视图或临时表一样对待被引用的子查询名称,从而起到一定...
  • zq9017197
  • zq9017197
  • 2010年10月13日 15:40
  • 1832

SQL 中的语法顺序与执行顺序

SQL与js的实验室 2017-01-22 21:17 很多程序员都很抵触SQL。其实SQL是一整为数不多的声明性语言,只是它的运行方式完全不同于我们所熟知的命令行语言、面向对象的程序语言、甚至是函...
  • u011277123
  • u011277123
  • 2017年01月23日 09:00
  • 7977

SQL语句执行顺序及建议--归纳整理

一、SQL语句准备执行阶段 当SQL 语句进入Oracle 的库缓存后 1) 语法检查:检查SQL 语句拼写是否正确和词序 2) 语义分析:核实所有的与数据字典不一致的表和列的名字 3) 轮廓存储检查...
  • q947817003
  • q947817003
  • 2013年10月30日 12:03
  • 9619

SQL语句之WHERE查询子句

限定查询(WHERE子句)       之前的查询是将一张表的全部记录查询出来,那么现在如果希望可以根据指定的条件查询的话,则必须指定限定查询。       格式:            [SELEC...
  • CTO_51
  • CTO_51
  • 2013年07月07日 18:57
  • 39495
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL语句各子句的执行顺序
举报原因:
原因补充:

(最多只允许输入30个字)