对于一个查询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. 举个通俗易懂的例子告诉你IAAS,SAAS,PAAS的区别

    作者:何足道链接:https://www.zhihu.com/question/21641778/answer/62523535来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  2. 11.1JS笔记

    1.js的数据类型分为基本和引用,基本(string.undefined.null.number,boolean),引用(object-->array.function.json等) 2.基本数 ...

  3. 对于读txt文件一点总结

    txt 内容 中间有比如如空格,制表符(tab)在txt为空格符(Spaces).回车符.换行符,有空字符串等情况,在读取过滤中要充分考虑到 1:打开文件 var sr=new StreamReade ...

  4. PAT 1001 害死人不偿命的(3n+1)猜想 (15)(C++&JAVA&Python)

    1001 害死人不偿命的(3n+1)猜想 (15)(15 分) 卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反 ...

  5. Linux CentOS 7 & JDK 1.7 安装与配置

    前言 简单记录一下在CentOS 7中安装配置JDK 1.7的全过程~ 下载 首先是jdk 1.7 64bit & 32bit的下载地址: jdk-7u79-linux-x64.tar.gz ...

  6. hdu 5326(基础题) work

    http://acm.hdu.edu.cn/showproblem.php?pid=5326 一道水题,题目大意是在公司里,给出n个员工和目标人数m,然后下面的n-1行是表示员工a管理b,问在这些员工 ...

  7. BZOJ 3329 - Xorequ - 数位DP, 矩乘

    Solution 发现 $x \ xor \  2x = 3x$ 仅当 $x$ 的二进制中没有相邻的 $1$ 对于第一个问题就可以进行数位DP 了. 但是对于第二个问题, 我们只能通过递推 打表 来算 ...

  8. UI设计师需要熟记的45个快捷键Windows、Mac

    大家都知道PS快捷键很多,其实没必要都记住,今天为大家整理了45个比较实用的,别忘了收藏. 图层 填充图层 MAC: Alt+Backspace (前景) or Cmd+Backspace (背景) ...

  9. Spring 系列教程之 bean 的加载

    Spring 系列教程之 bean 的加载 经过前面的分析,我们终于结束了对 XML 配置文件的解析,接下来将会面临更大的挑战,就是对 bean 加载的探索.bean 加载的功能实现远比 bean 的 ...

  10. python 字典遍历

    dic1={"name":"kxb","age":28}for k,v in dic1.items(): print(k+",,, ...