zoukankan      html  css  js  c++  java
  • 你不可不知的T-SQL执行顺序

    -- SQL查询处理的步骤(生成了很多中间表)

    SELECT TOP 3 a.CustomerId,COUNT(1) AS order_count

    FROM dbo.T_Customer AS a

    INNER JOIN dbo.T_Order AS b

    ON a.CustomerId = b.CustomerId

    WHERE a.CustomerId < 200

    GROUP BY a.CustomerId WITH ROLLUP

    HAVING COUNT(1)>10

    ORDER BY order_count;

     

     

    /* 执行顺序

    1、FROM:对FROM子句中的前两个表执行笛卡尔积(交叉联接),生成虚拟表T1。交叉连接:cross join 并且不需要ON连接

    2、ON:对T1应用ON筛选器,两边都匹配的数据放入到T2。(INNER JOIN)

    3、如果是左外连接或右外连接则保留表中未找到匹配的行将作为外部行添加到T2,生成T3。

    如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤到步骤,直到处理完所有的表位置。

    4、WHERE:对T3应用WHERE筛选器,只有使为true的行才插入T4。

    5、GROUP BY:按GROUP BY子句中的列列表对T4中的行进行分组,生成T5 。

    6、CUBE|ROLLUP:把超组插入T5,生成T6。

    7、HAVING:对T6(没有T6时针对T5)应用HAVING筛选器,只有使为true的组插入到T7。

    8、SELECT:处理SELECT列表,产生T8。

    9、DISTINCT:将重复的行从T8中删除,产品T9。

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

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

    */

  • 相关阅读:
    复杂模拟 | 1017 模拟N个顾客M个柜台进行排队
    徒手实现lower_bound和upper_bound
    树状数组 | 1057
    动态规划 | 最长回文子串 1040
    动态规划 | 背包问题 1068
    动态规划 | 对输入进行hash处理的LIS 1045
    总结那些有默认margin,padding值的html标签
    javascript 的七种基本数据类型
    牛客网笔试题整理
    JavaScript 的数据结构与算法
  • 原文地址:https://www.cnblogs.com/fanchaoyun/p/3331686.html
Copyright © 2011-2022 走看看