zoukankan      html  css  js  c++  java
  • Oracle中with as用法

    with as 相当于虚拟视图。

    例子:需求描述
    按照x列分组后统计y列的总值,最终目标是选出比y列总值的三分之一大的那些分组统计信息
     
    使用子查询方式实现最容易想到的方法
    SELECT x, SUM (y) AS total_y
         FROM t
       GROUP BY x
       HAVING SUM (y) > (SELECT SUM (y) FROM t) / 3
       ORDER BY total_y
     
     
     
    WITH Clause方法闪亮登场
    WITH secooler_sum AS (SELECT x, SUM (y) total_y
                              FROM t
                            GROUP BY x)
      SELECT x, total_y
        FROM secooler_sum
       WHERE total_y > (SELECT SUM (total_y) FROM secooler_sum) / 3
      ORDER BY total_y
     
    查询语句不是以select开始的,而是以“WITH”关键字开头
    可认为在真正进行查询之前预先构造了一个临时表secooler_sum,之后便可多次使用它做进一步的分析和处理
     
    WITH Clause方法的优点
    增加了SQL的易读性,如果构造了多个子查询,结构会更清晰;
    更重要的是:“一次分析,多次使用”,这也是为什么会提供性能的地方,达到了“少读”的目标
     
    知其所以然
    为什么WITH Clause方法会提高效率?通过查看上面两种方法的执行计划便可略知一二。
     
    第一种使用子查询的方法T表被扫描了两次,而使用WITH Clause方法,T表仅被扫描一次
    这也是为什么在大型数据仓库系统中推荐使用WITH Clause方法进行查询统计的原因,这样可以大大的提高数据分析和查询的效率
     
    另外,观察WITH Clause方法执行计划,其中“SYS_TEMP_XXXX”便是在运行过程中构造的中间统计结果临时表。
    美好生活
  • 相关阅读:
    Sql Server 2008卸载后再次安装一直报错
    listbox 报错 Cannot have multiple items selected when the SelectionMode is Single.
    Sql Server 2008修改Sa密码
    学习正则表达式
    Sql Server 查询第30条数据到第40条记录数
    Sql Server 复制表
    Sql 常见面试题
    Sql Server 简单查询 异步服务器更新语句
    jQuery stop()用法以及案例展示
    CSS3打造不断旋转的CD封面
  • 原文地址:https://www.cnblogs.com/ssbydk/p/9142513.html
Copyright © 2011-2022 走看看