对于一个查询SQL而言,通常将其逻辑处理过程分成7个大的阶段

分别是:

1.FROM

2.WHERE

3.GROUP BY

4.HAVING

5.SELECT

6.ORDER BY

7.TOP/OFFSET/FETCH

1、SQL语句执行阶段示例.

(5)select (5-2) distinct(5-3) top(<top_specification>)(5-1)<select_list>
(1)from (1-J)<left_table><join_type> join <right_table> on <on_predicate>
(1-A)<left_table><apply_type> apply <right_table_expression> as <alias>
(1-P)<left_table> pivot (<pivot_specification>) as <alias>
(1-U)<left_table> unpivot (<unpivot_specification>) as <alias>
(2)where <where_pridicate>
(3)group by <group_by_specification>
(4)having<having_predicate>
(6)order by<order_by_list>

2、流程图

流程:

1.FROM:该步骤用于验证查询的源表,并处理表操作符,生成虚拟表VT1

  1-1.如果存在左表和右表的交叉连接(求笛卡尔积),生成一个虚拟表VT1_1.

  1-2.对笛卡尔积(VT1)应用ON筛选器,生成虚拟表VT1_2.

  1-3.如果是外部连接,1-2中被过滤掉的数据将会被重新添加到虚拟表VT1_2中,生成虚拟表VT1_3.

2.WHERE:对虚拟表VT1应用WHERE筛选器,生成虚拟表VT2

3.GROUP BY:将VT2中的数据进行分组,生成VT3,如果语句包含WITH CUBE 或者WITH ROLLUP语句,则将分组统计结果再次加总后插入VT3,生成VT3_1.

4.HAVING:对VT3虚拟表应用HAVING筛选器,生成虚拟表VT4.

5.SELECT:处理SELECT中的子元素,生成虚拟表VT5.

  5-1.计算表达式:处理SELECT列表中的计算表达式,生成VT5_1.

  5-2.DISTINCT:处理VT5_1中的重复行,生成VT5_2.

6.ORDER BY:对VT5_2进行排序,生成一个游标VT6

  6-1.该步骤中已经可以使用SELECT列表中的列别名

  6-2.ORDER BY子句是应用到最终结果集上的,因此当SQL中出现UNION等关键字时,ORDER BY执行顺序在UNION操作之后.

7.TOP:根据ORDER BY子句中指定的排序规则,从VT6中筛选指定数量的行

参考资料:王晓文、张洪举<<锋利的SQL>>

T-SQL查询的逻辑处理过程的更多相关文章

  1. C# EF使用SqlQuery直接操作SQL查询语句或者执行过程

    Entity Framework是微软出品的高级ORM框架,大多数.NET开发者对这个ORM框架应该不会陌生.本文主要罗列在.NET(ASP.NET/WINFORM)应用程序开发中使用Entity F ...

  2. .NET Entity Framework(EF)使用SqlQuery直接操作SQL查询语句或者执行过程

    Entity Framework是微软出品的高级ORM框架,大多数.NET开发者对这个ORM框架应该不会陌生.本文主要罗列在.NET(ASP.NET/WINFORM)应用程序开发中使用Entity F ...

  3. 详细分析SQL语句逻辑执行过程和相关语法

    本文目录: 1.SQL语句的逻辑处理顺序 1.2 各数据库系统的语句逻辑处理顺序 1.2.1 SQL Server和Oracle的逻辑执行顺序 1.2.2 MariaDB的逻辑执行顺序 1.2.3 M ...

  4. SQL查询(医疗项目的SQL复习)

    内容来自于

  5. mysql体系结构和sql查询执行过程简析

    一: mysql体系结构 1)Connectors 不同语言与 SQL 的交互 2)Management Serveices & Utilities 系统管理和控制工具 备份和恢复的安全性,复 ...

  6. SQL SERVER 2008:内部查询处理器错误: 查询处理器在执行过程中遇到意外错误

       今天一个同事突然告诉我,以前跑得很正常的一个SQL语句,执行时突然报如下错误:         消息1222,级别16,状态18,第1 行         已超过了锁请求超时时段.        ...

  7. SQL 查询的执行过程

    所述内容均来自互联网,文章仅作为学习笔记,备忘使用. 有时候我在想我们总是在谈优化,FA 优化结构.优化框架.优化程序…,可是我真的了解将要进行的操作[优化]吗?以最近我的工作-优化SQL为例,我真的 ...

  8. SQL查询语句执行的逻辑顺序

    一.简介 大家都知道SELECT语句是用来查询数据表中的数据的,构成SELECT语句的还有各种元素(where.from.group by等),不同元素又代表了不同的处理逻辑,那么这些元素在执行查询时 ...

  9. Oracle常用SQL查询(2)

    三.查看数据库的SQL 1 .查看表空间的名称及大小 select  t.tablespace_name,  round ( sum (bytes / ( 1024 * 1024 )), 0 ) ts ...

随机推荐

  1. Topological Sorting拓扑排序

    定义: Topological Sorting is a method of arranging the vertices in a directed acyclic graph (DAG有向无环图) ...

  2. android的图片的初步学习理解

    Android支持JPEG和PNG格式.GIF和BMP格式图片的支持. 图片最终要显示在屏幕上,都会对应一个屏幕上的点,即对应一个颜色值.不同格式的图片,只是不同压缩编码和解压算法. 也就是说,我们看 ...

  3. es6问答

    1. 箭头函数的特点 *箭头函数this的指向是定义时所在的对象,而不是使用时所在的对象: * 箭头函数不能做构造函数 * 不能使用argument对象 *不能使用yield命令 2.let cons ...

  4. idea自动生成文档注释

    这方面主要分为两块内容,一是利用idea本身具有的生成模板工具进行生成:二是利用第三方插件生成,比如jindent 后期会进行整理更新,待续 下面的网址目前只是关于这方面的介绍,先留存一份而已 htt ...

  5. MVC与WebApi中的异常统一处理

    1.简单例子 /// <summary> /// 全局页面控制器异常记录 MVC的异常处理 /// </summary> public class CustomErrorAtt ...

  6. C#生成二维码(可保存二维码图片)

    https://www.cnblogs.com/wlays/p/7994393.html 1.NuGet中搜索QRCoder,安装这个插件. 2.创建一个一般处理程序,代码: public void ...

  7. 用js实现回车登录而不用点击登录按钮

    在你的登录jsp里面,添加一个js <script> function on_return(){ //on_return这是方法名 if(window.event.keyCode == 1 ...

  8. linux 输出重定向

    输出重定向 标准输入 文件描述符:0 设备:键盘 设备文件名:/dev/stdin 标准输出 文件描述符:1 设备:显示器 设备文件名:/dev/sdtout 标准输出重定向 命令 >> ...

  9. Mac下安装社区版MongoDB

    MongoDB下载地址:https://www.mongodb.com/download-center?_ga=2.98072543.1777419256.1515472368-391344272.1 ...

  10. 201621123008 《Java程序设计》第十周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1. 常用异常 结合题集题目7-1回答 1.1 自己以前编写的代码中经常出现 ...