• 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 子句中指定的列名列表对数据进行排序,并生成游标

     

  • 相关阅读:
    优化Http请求、规则1减少Http请求 更新中
    js 验证日期格式
    SQL 在OPENQUERY中使用参数
    onpropertychange 和 onchange
    js 去掉空格
    检索 COM 类工厂中 CLSID 为 {000209FF00000000C000000000000046} 的组件时失败解决方法
    C#连接oracle数据库操作
    SQL游标
    MS SQL 设置大小写区别
    vs jquery 智能提示
  • 原文地址:https://www.cnblogs.com/youshan/p/2135622.html
Copyright © 2020-2023  润新知