Select执行顺序

 开发者、数据分析师每天都在写【SELECT 列a,聚合函数 FROM 表名 WHERE 过滤条件 GROUP BY 列a HAVING 筛选条件】这样的查询语句。

  SQL与其他语言不同的最明显特征是代码的处理顺序,大多数编程语言中,代码是按照编写顺序来处理的,但在SQL中第一个要处理的子句是FROM子句,尽管SELECT语句第一个出现,但基本都在最后处理。

       每一步都会生成一个虚拟表,该虚拟表会作为下一步的输入, 这些虚拟表对于调用者(客户端应用程序或者外部查询)都是不可用的,只有最后一步生成的虚拟表才会返回给调用者,这种形态可对比LINQ理解。

①FROM        FROM阶段负责标识表或要查询的表,如果指定了表运算符(JOIN, APPLY,PIVOT,UNPIVOT ),还要进行表运算符的处理。

              例如:表联接运算中涉及的阶段是 笛卡尔积、ON筛选器和 添加外部行,FROM阶段生成虚拟表VT1.

②WHERE           这个阶段根据在WHERE子句中出现的谓词对VT1中进行筛选,只有让谓词计算结果为TRUE的行,才会插入VT2中。

③GROUP BY     按照GROUP BY 子句中指定的列名列表,对VT2中的行进行分组,生成VT3, 最终每个分组只有一个结果行。

④HAVING          根据HAVING子句中出现的谓词,对VT3中行记录进行筛选,只有让谓词结果为TRUE的行记录,才会进入VT4, Having 筛选器是唯一可用于分组数据的筛选器。

⑤SELECT    处理SELECT子句中字段(某些字段可能进行一些操作,形成新的字段),形成虚拟表VT5

⑥ORDER BY  根据ORDER BY子句中指定的列名列表,对VT5 中行进行排序,输出最后结果。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容