暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL Server 中SQL语句执行顺序

628

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的区别:

    where是对原始数据进行筛选;

    having是对聚合后的数据进行筛选;

    where语句执行在having语句之前。

    ⑧ 选择——select

    前面⑦步都完成之后,我们得到了一个虚拟表(不可见)。

    然后我们使用select语句进行列选择(说白了,我们必须先得到一个表,select…from之间的语句,只对表中的行或列进行一些选择罢了)。

    所以,select语句“ 几乎总是最后被处理 ”。

    ⑨ 去重——distinct

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

    ⑩ 排序——order by

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

    ⑪ 选择前n行——top n

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

    文章转载自跟着阿笨一起玩NET,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论