说说我对SQL语句执行顺序的理解,以SQL Server为例
有人说SQL语句难学,其实并不难!只要掌握了基本的语句执行顺序,用程序化的思维分析结构,再难的问题也会迎刃而解!
假设有如下表emp
现在要求 列出员工姓名(ename)中不含A的所有人按照部门编号(deptno)分组后,每个部门的平均工资大于2000的部门的编号、工资、人数
分析上题,罗列出具体要求
1.员工姓名(ename)中不含A
2.将所有员工按照部门分组
3.找出平均工资大于2000的所有部门
4.列出部门编号、人数、平均工资
如果分别解决这些问题,那么很简单
1. select * from emp where ename not like '%A%' 2. select deptno from emp group by deptno 3. select deptno from emp group by deptno having avg(sal)>2000 4. select deptno,count(*),avg(sal) from emp group by deptno
接着考虑把步骤合在一块儿之前,必须了解sql语句的执行顺序
SQL Select语句完整的执行顺序:
- 1、from子句组装来自不同数据源的数据;
- 2、where子句基于指定的条件对记录行进行筛选;
- 3、group by子句将数据划分为多个分组;
- 4、使用聚集函数进行计算;
- 5、使用having子句筛选分组;
- 6、计算所有的表达式;
- 7、使用order by对结果集进行排序。
如果放在SQL语句上,将这些步骤用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>
再回到题目
列出员工姓名(ename)中不含A的所有人按照部门编号(deptno)分组后,每个部门的平均工资大于2000的部门的编号、工资、人数
现在可以按照SQL语句处理思维,重新描述解决步骤,每个子句执行完毕都生成了一张临时表
1.from子句定位到emp表
from emp
执行完这句,系统创建的临时表如下
2.从上面的临时表中 筛选出所有ename中不包含A的
from emp
where ename not like '%A%'
执行完,临时表变成了:
3.再根据deptno对上面的临时表进行分组(为了便于理解,这里提前显示了部门编号 人数和平均工资)
from emp
where ename not like '%A%'
group by deptno
执行完这句,临时表变成了:
4.再从上一张临时表中 找出平均工资大于2000的部门,并选择要显示那些列(部门编号 部门人数 部门平均工资)
select deptno "部门编号",count(*) "部门人数",avg(sal) "部门平均工资"
from emp
where ename not like '%A%'
group by deptno
having avg(sal)>2000
执行完这坨代码,临时表又变成了
5.好了,到这里sql语句全部执行完毕,系统自动将上面临时表显示在客户端
最终结果,也就是你看到的
说说我对SQL语句执行顺序的理解,以SQL Server为例的更多相关文章
- Oracle sql语句执行顺序
sql语法的分析是从右到左 一.sql语句的执行步骤: 1)词法分析,词法分析阶段是编译过程的第一个阶段.这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构 ...
- sql 语句执行顺序
一.sql语句的执行步骤: 1)语法分析,分析语句的语法是否符合规范,衡量语句中各表达式的意义. 2) 语义分析,检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限. 3)视图转换,将涉及视图 ...
- 整理:sql server 中sql语句执行顺序
SQL Server 查询处理中的各个阶段(SQL执行顺序) SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是 ...
- sql语句执行顺序与性能优化(1)
一.首先我们看一下mysql的sql语句的书写顺序 . select--distinct--from--on--where--group by--having--聚合函数cube.rollup--or ...
- hive sql 语句执行顺序及执行计划
hive 语句执行顺序 from... where.... select...group by... having ... order by... 执行计划 Map Operator Tree: Ta ...
- Oracle sql语句执行顺序(转)
from: http://blog.csdn.net/lailai186/article/details/12612263 sql语法的分析是从右到左 一.sql语句的执行步骤:1)语法分析,分析语句 ...
- SQL Server SQL语句执行顺序
执行顺序: 1.FROM:对FROM子句中前两个表执行笛卡尔积生成虚拟表vt1 2.ON:对vt1表应用ON筛选器只有满足 为真的行才被插入vt2 3.OUTER(join):如果指定了 OUTER ...
- <转>SQL语句执行顺序说明
原文地址:http://www.cnblogs.com/summer_adai/archive/2011/10/28/2227605.html SQL 不同于与其他编程语言的最明显特征是处理代码的顺序 ...
- EF生成的SQL语句执行顺序问题。
//实体被更改后,再做删除,EF只生成删除语句 //实体删除后再更改,EF报错 //添加语句会再,更改,删除后执行,更AddObject位置无关 //一个实体多个字段被改,只会生成一句update / ...
随机推荐
- map或者对象转换
map或者对象转换为具有相同字段的对象 List<Example> errorCodeExcelBeanList = JSONObject.parseArray(((JSONObject) ...
- java中对于多态的一个实例分析
首先来看这样的一段代码,其中对于类的定义如下: class Parent{ public int myValue=100; public void printValue() { System.out. ...
- 自定义配置 const
自定义常量配置文件:settings/const.py # 自定义的常量配置文件,在settings中 from 该文件 import *,将名字全部丢给settings BANNER_COUNT = ...
- 电子书及阅读器Demo
电子书阅读器(Kindle,电子纸技术.LCD.电子墨水技术等: 亚马逊/当当网站) 电子书产业可分5大环节:内容供应商.数字格式制作商.内容流通服务平台.传输平台以及终端阅读器产品. 全球电子书市 ...
- Java的下载与安装
下载Java 如果要是想聊天,那我们就需要腾讯QQ,先把它下载过来安装上,就可以聊天了,那如果是想要开发java程序呢,我们就需要下载一个开发工具包“jdk”,安装上就可以开发了.当然java是属于哪 ...
- 重新理解《务实创业》---HHR计划--以太一堂第三课
第一节:开始学习 1,面对创业和融资,我们应该如何从底层,理解他们的本质呢?(实事求是) 2,假设你现在要出来融资,通常你需要告诉投资人三件事:我的市场空间很大,我的用户需求很疼,我的商业模式能跑通. ...
- Python组合类型笔记
Python中常用的三种组合数据类型,分别是: - 集合类型 - 序列类型 - 字典类型 1. 集合类型: -集合用大括号{}表示,元素间用逗号分隔 -建立集合类型用{}或set() -建立空集合类型 ...
- 关于盒模型的外边距padding和内边距margin
边框border属性值 solid实线 dashed虚线 dotted点线 double双实线 /* 内边距 */padding:20px 30px 30px 30px;若有四个值代表 ...
- web组件化开发第一天
技术选型 html5 css3 jq 应用的插件 FullPage.js 一.建一个测试页面,测试静态的功能 <!DOCTYPE html> <html> <head&g ...
- iOS 批量上传图片的 3 种方法
AFNetworking 在去年年底升级到了 3.0.这个版本更新想必有很多好处,然而让我吃惊的是,它并没有 batch request 接口.之前的 1.x 版本.2.x 版本都实现了这个很常见的需 ...