• Oracle With As 查询


    WITH AS

    WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到。有的时候,是为了让SQL语句的可读性更高些,也有可能是在UNION ALL的不同部分,作为提供数据的部分。

    特别对于UNION ALL比较有用。因为UNION ALL的每个部分可能相同,但是如果每个部分都去执行一遍的话,则成本太高,所以可以使用WITH AS短语,则只要执行一遍即可。如果WITH AS短语所定义的表名被调用两次以上,则优化器会自动将WITH AS短语所获取的数据放入一个TEMP表里,如果只是被调用一次,则不会。而提示materialize则是强制将WITH AS短语里的数据放入一个全局临时表里。很多查询通过这种方法都可以提高速度。

    with

        sql1 as (select to_char(a) s_name from test_tempa),

        sql2 as (select to_char(b) s_name from test_tempb where not exists (select s_name from sql1 where rownum=1))

    select * from sql1

    union all

    select * from sql2

    union all

    select 'no records' from dual

           where not exists (select s_name from sql1 where rownum=1)

           and not exists (select s_name from sql2 where rownum=1);

    另外,WMSYS.WM_CONCAT 这个函数可以将查询结果某列多行拼接成一个结果,非常实用。

    With语句的语法(AS后面的括号是不可以空缺的)

    WITH <alias_name> AS (subquery_sql_statement)

    SELECT <column_name_list> FROM <alias>;

    注意,定义了WITH语句必须在后边的查询中使用,否则提示错误。

    WITH子句相关总结:

    1、在同级select前有多个查询定义的时候,第1个用with,后面的不用with,并且用逗号隔开。

    2、最后一个with 子句与下面的查询之间不能有逗号,只通过右括号分割,with 子句的查询必须用括号括起来

    3、如果定义了with子句,而在查询中不使用,那么会报ora-32035 错误:未引用在with子句中定义的查询名。(至少一个with查询的name未被引用,解决方法是移除未被引用的with查询),注意:只要后面有引用的就可以,不一定非要在主查询中引用,比如后面的with查询也引用了,也是可以的。

    4、前面的with子句定义的查询在后面的with子句中可以使用。但是一个with子句内部不能嵌套with子句。

    5、with查询的结果列有别名,引用的时候必须使用别名或*。

    WITH语句的优点:

    (1). SQL可读性增强。比如对于特定with子查询取个有意义的名字等。

    (2)、with子查询只执行一次,将结果存储在用户临时表空间中,可以引用多次,增强性能。

    举例:在进行导入EXCEL的过程中,有时候,需要将数据存储在临时表中,当下一次在进行导入的时候,进行清除临时表的数据,但是这时候,有时候发生并发问题的话,两个用户可能会分别操作对方的数据,所以,可能造成混乱,但是可以使用WITH函数和UNION语句拼接一个SQL语句,存储在SESSION中,当需要导出错误信息的时候,可以使用该语句构造数据。

  • 相关阅读:
    Android sdk + PhoneGap 配置
    一个解析url参数方法
    开始写笔记了~~
    Codevs 3305 水果姐逛水果街Ⅱ 倍增LCA
    Codevs 3304 水果姐逛水果街Ⅰ 线段树
    Cogs 1070. [焦作一中2012] 玻璃球游戏 带权并查集,逆序处理
    Bzoj 1901: Zju2112 Dynamic Rankings 主席树,可持久,树状数组,离散化
    Bzoj 2453: 维护队列 && Bzoj 2120: 数颜色 分块,bitset
    Uoj #131. 【NOI2015】品酒大会 后缀数组,并查集
    Tyvj P1463 智商问题 分块
  • 原文地址:https://www.cnblogs.com/shengs/p/5954837.html
Copyright © 2020-2023  润新知