SQL Server 中SQL语句执行顺序

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语句执行顺序

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值