考虑SQL DML(Data Manipulation Language 数据操控语言)的最好方法是了解查询的逻辑流。由于SQL是一种声明性语言,逻辑流可能是(也可能不是)SQL SERVER的查询处理器用于执行查询的实际物理流。逻辑流也不等于查询语法。不管怎样,还是建议按下列顺序考虑查询。
下面是查询逻辑流的详细说明。请注意:除了第(4)步,每一步都是可选的。
(1)[FROM]:如SELECT语句的FROM部分所指定的那样,查询以组装寝数据集开始。
(2)[WHERE]:筛选处理实际上是只选择那些符合标准的行的WHERE子句。
(3)[Aggregations]:SQL可以选择性地对数据集执行聚合,如求平均值,按列中的值对数据分组及筛选组。
(4)列表达式:处理SELECT列,并计算任何表达式。
(5)[ORDER BY]:根据ORDER BY子句对结果进行排序。
(6)[OVER]:窗体函数和排名函数通过与其他聚合函数一起使用可以提供结果的单独排序的视图。
(7)[DISTINCT]:从结果集中删除任何重复的行。
(8)[TOP]:选择行后,执行计算,并将数据按所需的顺序排序,这样SQL将输出限定为前几行。
(9)[INSERT,UPDATE,DELETE]:查询的最后逻辑步骤是将数据修改操作应用到查询结果。
(10)[OUTPUT]:可以选择插入的和删除的虚拟表(通常仅和触发器一起使用)并返回给客户端,插入到表中或作为外部查询的数据源。
(11)[UNION]:使用UNION命令可以合并多个查询的结果。
随着SQL SELECT命令越来越复杂,如何考虑逻辑流也变得越来越复杂。在各种来源中,会发现SQL MPV看待逻辑流的方式的细微差别。
由于我们开始考虑SQL SELECT语句,面不是图形用户界面,因此了解SELECT的流程以及如何读取查询计划,有助于考虑并开发疑难的查询。