zoukankan      html  css  js  c++  java
  • SQL查询语句执行的顺序是-----------------

    MSSQL逻辑查询的步骤 摘自:Microsoft SQL Server 2005技术内幕:T-SQL查询

    逻辑查询处理中的各个阶段 

    本节介绍逻辑查询处理所涉及的各个阶段。我先简要描述一下每个阶段,然后在后面的几节中对它们进行更为详细的介绍,并把它们应用到一个示例查询。当回忆各个阶段的含义和顺序时,你可以将本节作为一个快速参考。 

    代码清单1-1列出了查询的一般形式,并根据各个子句被逻辑处理的顺序附以步骤序号。 

    代码清单1-1  逻辑查询处理的步骤1 

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

    SQL不同于与其他编程语言的最明显特征是处理代码的顺序。在大多数编程语言中,代码按编码顺序被处理,但在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但几乎总是在最后被处理。 

    每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只有最后一步生成的表才会返回给调用者。如果没有在查询中指定某一子句,将跳过相应的步骤。下边是对应用于SQL Server 2000和SQL Server 2005的各个逻辑步骤的简单描述。在本章的后面,我将单独讨论SQL Server 2005中新增的步骤。 

    逻辑查询处理阶段简介 

    如果你觉得现在对这些步骤的描述没有多大意义,不用太着急,它们只是一个概述。示例查询后面有一节将详细描述这些步骤。 

    1. FROM: 对FROM子句中的前两个表执行笛卡尔乘积(Cartesian product)(交叉联接),生成虚拟表VT1。 

    2. ON: 对VT1应用ON筛选器。只有那些使为真的行才被插入VT2。 

    3. OUTER(JOIN): 如果指定了OUTER JOIN(相对于CROSS JOIN或INNER JOIN),保留表(preserved table)中未找到匹配的行将作为外部行添加到VT2,生成T3。如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到处理完所有的表为止。 也就是说按照顺序执行表的连接操作,前两张表执行交叉联接,生成第三张临时表,后面这张临时表在跟后面的表进行交叉联接,生成中间临时表。。。这样继续进行,直到from 后的表没有就OK,继续执行顺序。

    4. WHERE: 对VT3应用WHERE筛选器。只有使为TRUE的行才被插入VT4。 

    5. GROUP BY: 按GROUP BY子句中的列列表对VT4中的行分组,生成VT5。 

    6. CUBE|ROLLUP: 把超组(Supergroups)插入VT5,生成VT6。 

    7. HAVING: 对VT6应用HAVING筛选器。只有使为TRUE的组才会被插入VT7。 

    8. SELECT: 处理SELECT列表,产生VT8。 

    9、 DISTINCT: 将重复的行从VT8中移除,产生VT9。 

    10. ORDER BY: 将VT9中的行按ORDER BY子句中的列列表排序,生成一个游标(VC10)。 

    11. TOP: 从VC10的开始处选择指定数量或比例的行,生成表VT11,并返回给调用者。

     
  • 相关阅读:
    Python中所有的关键字
    关于selenium的8种元素定位
    对提示框的操作
    selenium+webservice进行百度登录
    MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled...报错解决
    Vue中使用echarts
    npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142解决方法
    插入排序
    冒泡排序优化
    roject 'org.springframework.boot:spring-boot-starter-parent:XXX' not found 解决
  • 原文地址:https://www.cnblogs.com/linjulin/p/5694996.html
Copyright © 2011-2022 走看看