带AS用法的ORACLE
查询语句WITH不是以select开头,而是以关键字“With”开头
可以认为是在实际查询之前预先构造了一个临时表,然后可以多次用于进一步的分析处理。
WITH子句方法的优点
增加了SQL的可读性,如果构造多个子查询,结构会更清晰;更重要的是“分析一次,使用多次”,这也是它提供性能,达到“少读”目标的原因。
第一种使用子查询的方法扫描表两次,而使用WITH子句的方法只扫描表一次。这可以大大提高数据分析和查询的效率。
此外,观察WITH子句方法的执行计划,其中“SYS_TEMP_XXXX”是运行过程中构建的中间统计结果的临时表。
语法:
以tempName为(选择.)
挑选.
-化名
tmp为(从tb_name中选择*
-对于多个别名
随着
tmp as(从tb_name中选择*),
tmp2 as(从tb_name2中选择*),
tmp3 as(从tb_name3中选择*),
…
-相当于建了一个E临时表。
带有e as(从scott.emp e中选择*其中e.empno=7499)
从e中选择*;
-相当于搭建临时表E和d。
随着
e as(从scott.emp中选择*),
d as(从scott.dept中选择*
从e、d中选择*其中e . dept no=d . dept no;
其实就是把很多重复使用的sql语句用as放进去,取一个别名,以后查询可以用它,这样优化了大量的sql语句,就清楚了。
作为向表中插入数据的用法:
插入表2
随着
s1 as(通过rownum=10从双连接中选择rownum c1),
s2 as(通过rownum=10从双连接中选择rownum c2)
从s1 a、s2 b中选择a.c1、b.c2,其中.
等同于虚拟视图。
With短语,也称为子查询因式分解,允许您做许多事情并定义一个sql片段,该片段将被整个sql语句使用。
有时,这是为了使sql语句更易读,或者它可能位于union的不同部分,都是提供数据的一部分。
对工会特别有用。
因为union的每个部分都可能是一样的,但是如果每个部分执行一次,成本太高,所以用as这个短语就可以了,所以只需要执行一次。
如果with as短语定义的表名被调用两次以上,优化器将自动将with as短语获得的数据放入临时表中,但如果只调用一次,则不会。
Prompt物化是将短语as中的数据强制放入全局临时表中。
这种方法可以加快许多查询的速度。
随着
sql1 as(从test_tempa中选择to_char(a) s_name),
sql2 as(从test_tempb中选择to_char(b) s_name,其中不存在(从sql1中选择s_name,其中rownum=1))
从sql1中选择*
联合所有
从sql2中选择*
联合所有
从dual中选择“无记录”
不存在的地方(从sql1中选择s_name,其中rownum=1)
并且不存在(从sql2中选择s_name,其中row num=1);
with as优点
增加了sql的可读性,如果构造多个子查询,结构会更清晰;
更重要的是“分析一次,使用多次”,这也是它提供性能,达到“少读”目标的原因。
转载:https://www.cnblogs.com/mingforyou/p/8295239.html
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/117965.html