SQL Server 中SQL语句执行顺序

我们需要对SQL语句的执行顺序了若指掌,才能更好的理解SQL。
SQL 不同于与其他编程语言的最明显特征是处理代码的顺序。
在大数编程语言中,代码按编码顺序被处理。
但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后被处理

每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入(需要理解这一概念)。
这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。
只是最后一步生成的表才会返回给调用者。
如果没有在查询中指定某一子句,将跳过相应的步骤。

下面是SQL Server 中SQL语句执行顺序的简单描述。

(8)SELECT (9)DISTINCT  (11)<Top Num> <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>

① 确定表名——from
我们要对某张表进行筛选,首先要确定目标表存在。
如果表都不存在,就更别谈什么取数据了,所以,最先执行的语句为“ from 表名
② 多表连接的条件——on
当我们需要对多张表进行连接时,需要使用 on 进行多个字段的连接。
先进行 on 的过滤,而后才进行 join ,这样就避免了两个大表产生全部数据的笛卡尔积的庞大数据。

③ 多表连接的方式——join
当我们需要对多张表进行连接时,需要指定连接的表名,以及表连接的方式。
如果没有多表连接,则没有②③两步。

④ 筛选条件——where
如果有多表连接,则可以对多张表的不同列进行筛选。
所以 where 语句的执行顺序肯定在多表连接之后。

⑤ 分组——group by
肯定要先筛选出我们需要的值,然后再对其进行分组。
如果想要对分组后的聚合内容进行筛选,就需要使用 having 语句。

⑥ 显示汇总行——with
with语句,可以在结果集内返回每一个可能的组和子组组合的 group by 汇总行。
一般不会使用,可以在确实需要使用的时候再去了解。

⑦ 聚合后筛选——having
group by 聚合后的内容进行筛选,顺序肯定在 group by 之后。

注意where和having的区别:

  1. where是对原始数据进行筛选
  2. having是对聚合后的数据进行筛选
  3. where语句执行在having语句之前

⑧ 选择——select
前面⑦步都完成之后,我们得到了一个虚拟表(不可见)。
然后我们使用select语句进行列选择(说白了,我们必须先得到一个表,select…from之间的语句,只对表中的行或列进行一些选择罢了)。
所以,select语句“ 几乎总是最后被处理 ”。

⑨ 去重——distinct
和select一样,我们需要先得到一个虚拟表,才能对其进行去重操作。

⑩ 排序——order by
对所有前面处理完的数据进行排序。

⑪ 选择前n行——top n
对排序之后的数据,选择前n行进行显示。

参考:sql server 中sql语句执行顺序

SQL Server 中SQL语句执行顺序相关推荐

  1. 整理:sql server 中sql语句执行顺序

    原文地址为: 整理:sql server 中sql语句执行顺序 SQL Server 查询处理中的各个阶段(SQL执行顺序) SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中 ...

  2. SQL Server中使用自定义指定顺序排序

    SQL Server中使用自定义指定顺序排序 原文:SQL Server中使用自定义指定顺序排序 比如需要对SQL表中的字段NAME进行如下的排序: 张三(Z) 李四(L) 王五(W) 赵六(Z) 如 ...

  3. SQL Server中T-SQL语句查询使用的函数

    SQL Server中T-SQL语句查询使用的函数 一,字符串函数 字符串函数用于对字符串数据进行处理,并返回一个字符串或数字. 函数名 描述 举例 CHARINDEX 用来寻找一个指定的字符串在另一 ...

  4. SQL Server中SQL Union vs Union All

    This article explains to the SQL Union and vs Union All operators in SQL Server. We will also explor ...

  5. sql ddl中key_SQL DDL:SQL Server中SQL DDL命令入门

    sql ddl中key This article explains SQL DDL commands in Microsoft SQL Server using a few simple exampl ...

  6. hmi中的宏指令是c语言,HMI中的宏指令编程中的语句执行顺序是?

    HMI中的宏指令编程中的语句执行顺序是? 以威纶通里的例子为例: 4. if结构语句 macro_command main() int k[10], j for j = 0 to 10 k[j] =  ...

  7. SQL server 中SQL语句实战操作

    学习网址链接: https://www.w3school.com.cn/sql/sql_top.asp 学习案例链接: https://wenku.baidu.com/view/720053b459f ...

  8. 关于sql和MySQL的语句执行顺序

    sql和mysql执行顺序,发现内部机制是一样的.最大区别是在别名的引用上. 一.sql执行顺序  (1)from  (3) join  (2) on  (4) where  (5)group by( ...

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

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

最新文章

  1. iOS15.4 来袭:新增“男妈妈”表情及口罩面容解锁、AirTags 反跟踪等新功能
  2. 深入理解分布式技术 - 负载均衡策略
  3. eclipse编译hadoop插件
  4. android应用开发(21)---Activity介绍
  5. POJ 3280 Cheapest Palindrome(DP)
  6. 强悍的命令行 —— 磁盘空间的查看与磁盘空间的释放
  7. hihocoder 1513 小Hi的烦恼——bitset
  8. SAP 独立系统的传输请求
  9. 螺旋桨RNA结构预测竞赛第10名方案
  10. 电影下载、播放、制作、转换、各类问题全攻略
  11. 论文略读 | Pointing the Unknown Words
  12. VTT到底需要多少个电容
  13. 查询数据库中所有表的记录数
  14. 30 岁转行做程序员是什么样的体验
  15. C++课程基础语法小结
  16. pod spec的创建及其使用
  17. c语言实现两分钟倒计时
  18. 85人教版高中英语第一册第十五课 NAPOLEON'S THREE QUESTIONS
  19. 服务器硬盘恢复出厂设置,教大家Macbook如何恢复出厂设置的方法
  20. oracle12c bin目录在哪里,OBIEE12c rpd文件更新及rpd所在目录介绍

热门文章

  1. NAACL 2019开源论文:基于胶囊网络的知识图谱完善和个性化搜索
  2. 设计模式:装饰模式 c++实现
  3. Android实战简易教程-第五十七枪(分享小米手电筒源码)
  4. Elementui如何修改自定义主题
  5. 【科学文献计量】知识单元文献时间序列分析
  6. python作业_作业 -- 几道简单的Python题
  7. [转载]献给初学者:Java咖啡的奶茶——Eclipse
  8. acwing奶牛大学
  9. 【QT项目——视频播放器——开发】
  10. 什么是Redis及其适用场景