SQL语句内部逻辑查询的执行顺序
来源:互联网 发布:市政工程师待遇知乎 编辑:程序博客网 时间:2024/05/01 07:16
在SQL语句做逻辑查询的时候会经历一下几个步骤:
一:添加外部行
(1)from
(2)笛卡儿积--这个时候是两张表做交叉连接。得到一个结果集,放入一张虚拟表中。
(3)ON筛选器。
【补充,对于INNER JOIN,查询条件放在where和ON后面效率是一样的,对于left join一般放在on条件后面先去筛选,效率可能会更高】
二 where子句
【补充,对于ON筛选器里面过滤的条件不是最终的结果,对于left join还会把结果集中标记的保留表加入进来,where 子句里面过滤的是最终的结果,这也就是为什么在一些有left join的数据表里面统计多少条结果集的时候推荐使用count( xx.guid) 而不是count(*),就是因为有时候count(从表.字段)的时候left join包含了左边所以行,count(*) 结果是不准确的,但是当统计主表时,使用主表.guid和count(*)差不多,如果guid是索引,速度稍微快一点点。】
三、group by 。 进行分组,null的值认为都是相等的,放入一组
四、HAVING。 对结果集进行处理,选出满足过滤条件的结果集
五、select 。 select 列表中的表达式可以返回上一步得到的虚拟表的基础列,也可以对这些基础列的操作。
【补充,对于select列表中创建的别名不能在前面的别名中使用,因为SQL有这样一个特性,就是多个表达式同时运行(all at once),如 select c1+1 as e1, e1+1 as e2就是错误的。 】
六、计算表达式
七、Distinct 。过滤相同列
八、TOP 选出前多少行,或者百分之多少行。
【关于这里注意一个with ties的使用,对于 TOP在order by在order之前的执行顺序个人认为有一定的争议,博友可以去验证下。】
九、ORDER BY 对结果集进行排序。
【这一步返回的不是一个虚拟表,而是一个游标,所以类似于select * from (select orderid ,customerid from a order by guid desc) as c 的写法都是错的。】
- SQL语句内部逻辑查询的执行顺序
- SQL逻辑查询语句执行顺序
- SQL逻辑查询语句执行顺序
- SQL逻辑查询语句执行顺序
- SQL逻辑查询语句执行顺序
- SQL逻辑查询语句执行顺序
- SQL逻辑查询语句执行顺序
- SQL逻辑查询语句执行顺序
- sql语句逻辑执行顺序
- Sql查询--sql语句的执行顺序
- sql 语句的执行顺序(1)逻辑查询的各个阶段
- SQL查询语句各部分的执行顺序
- sql查询语句的执行顺序
- SQL 查询语句执行顺序
- sql语句查询执行顺序
- sql语句查询执行顺序
- SqlServer中Sql语句的逻辑执行顺序
- SqlServer中Sql语句的逻辑执行顺序
- 关于 ORA-19502 ORA-15081 问题
- Memory Layout (Virtual address space of a C process)
- C#委托基础学习
- (jenkins)hudson平台搭建android项目持续化集成以及基于NativeDriver的UI自动化测试环境
- Struts2 Action的单元测试
- SQL语句内部逻辑查询的执行顺序
- Java中用内存映射处理大文件
- C#网络编程系列
- Unity3D 中脚本执行的先后顺序
- FlexPaper+SWFTools 实现仿百度文库及一些小问题
- javascript中setTimeOut用法
- Java新浪微博客户端开发
- MQ简介
- XMLUtil工具类(dom4j)