• 技术文章 >数据库 >Oracle

    oracle中with as的用法是什么

    长期闲置长期闲置2022-02-28 10:57:20原创92

    在oracle中,“with as”语句相当于创建一个临时表,将一个语句中的中间结果放在临时表空间,也可以用该语句定义多个临时表,语法为“with temptablename([字段列表]) as (select ...)”。

    本教程操作环境:Windows10系统、Oracle 11g版、Dell G3电脑。

    oracle中with as的用法是什么

    Oracle查询中的with as子句相当于创建一个临时表,将一个语句中的某些中间结果放在临时表空间。将查询中的子查询命名,放到SELECT语句的最前面。语法如下:

    with temptablename([字段列表]) as (select ...)
    select ...

    也可以使用with as子句定义多个临时表,创建多个临时表时,后面的临时表可以访问前面已经建好的临时表。语法如下:

    with
    temptablename1([字段列表]) as (select ...),
    temptablename2([字段列表]) as (select ...)
    select ...

    说明:

    (1)使用with as子句创建的临时表在检索查询完成以后就被消除。

    (2)创建多个临时表时,后者可以访问前面已经建好的临时表。

    (3)当一个查询有多个相同的子查询时,一般使用with as子句,因为子查询结果存在内存临时表中,执行效率较高。

    用法举例

    查询哪些部门的工资总额高于所有部门的平均工资:

    1、不用with as

    代码及查询结果如下:

    SELECT deptno,total_sal
    FROM (SELECT deptno,sum(sal) as total_sal
          FROM employee
          GROUP BY deptno) temp1
    WHERE total_sal>(
          SELECT avg(total_sal)
          FROM (SELECT deptno,sum(sal) as total_sal
          FROM employee
          GROUP BY deptno)
    10:46:44  10        );
        DEPTNO  TOTAL_SAL
    ---------- ----------
        20 5701632000
    Elapsed: 00:00:02.33

    在该例子中,在一个查询中出现了两个相同的子查询。

    2、使用with as

    10:45:47 SQL> 
    WITH tempA AS
         (SELECT deptno,sum(sal) as total_sal
          FROM employee
          GROUP BY deptno)
    SELECT *
    FROM tempA
    WHERE total_sal>(
         SELECT AVG(total_sal)
         FROM tempA
    10:46:02  10       );
        DEPTNO  TOTAL_SAL
    ---------- ----------
        20 5701632000
    Elapsed: 00:00:01.42

    通过两种查询的对比可以看出,使用with as子句可以简化查询语句,并且可以提高查询的速度。

    推荐教程:《Oracle视频教程

    以上就是oracle中with as的用法是什么的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:oracle
    上一篇:oracle中if的用法是什么 下一篇:怎么修改oracle的sid
    PHP编程就业班

    相关文章推荐

    • oracle怎么查询数据库的默认表空间• oracle中怎么创建存储过程• oracle中什么是表空间• 什么是oracle 11g• oracle存储过程的作用有哪些

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网