• Microsoft SQL Server 2008 技术内幕:TSQL查询 逻辑查询处理阶段(一)


     逻辑查询处理的各个阶段

    sqlserver select 执行顺序
    (5) select (5-2) distinct(5-3) top (<top_specification>)(5-1)<select_list>
    (1) from(1-j)<left_table> <join_type>join <right_table> on <on_predicate>
       |(1-a)<left_table> <apply_type> apply <right_table_experssion> as <alias>
       |(1-p)<left_table> pivot(<pivot_spectification>) as <alias>
       |(1-u)<left_table> unpivot unpivot(<unpivot_specification>) as <alias>
    (2) where <where_predicate>
    (3) group by <group_by_specification>
    (4) having <having_precification>
    (6) order by <order_by_list>


    逻辑查询阶段简介

    1-->From :此阶段标识出要查询的来源表,处理表运算符,每个表运算符也会应用一系列子阶段。例如:在联接运算符中涉及到的阶段是笛卡尔积,On筛选器和添加外部行。并生成虚拟表供下一个操作步骤;

    1.1-->笛卡尔积:此阶段将两个表的数据进行交叉联接,并生成虚拟表

    1.2-->on筛选器:根据中的条件来筛选笛卡尔积虚拟表中的数据,并将满足条件的数据插入到新的虚拟表中

    1.3-->添加外部行:如果指定了OUTER JOIN(相对于CROSS JOIN 或INNER JOIN),则将保留表中没有找到匹配的行,插入笛卡尔积虚拟表中,并将生           成新的虚拟表,进一步操作

    2-->Where 操作 此阶段根据where子句中出现的谓词对满足on操作后保留的虚拟表进行条件筛选。将满足条件的数据插入到新的虚拟表中

    3-->Group By 按照group by 中指定的列名列表将where操作后的虚拟中的数据进行分组,最终每个分组只有一个数据行,

    4-->Having 对分组后的数据进行再一次条件筛选,并生成新的虚拟表,

    5-->Select 处理select 子句中的元素

    5.1-->计算select子句中的表达式

    5.2-->Distinct 删除having后的重复数据

    5.3-->TOP 根据order by 子句中定义的逻辑顺序,从前面操作的虚拟数据表中提取相应的记录数据

    6-->Order By 根据order by 子句中指定的列名列表对数据进行排序,并生成游标

     

  • 相关阅读:
    1022词法分析的感想
    0909 对编译原理的看法
    0909 编译原理
    oracle安装不容易啊
    2016.8.24
    vue配置config ‘./.../.../***/**.vue’路径别名
    vue 路由过渡效果(1)
    域名配置DNS解析A记录,映射到主机
    vue 线上,本地,不同变量配置
    No 'Access-Control-Allow-Origin'跨域问题- (mysql-thinkphp) (6)
  • 原文地址:https://www.cnblogs.com/youshan/p/2135624.html
Copyright © 2020-2023  润新知