oraclewith嵌套with_oracle的with语法

1. With语句的语法

Oracle在9i中引入了with语句。with语句用来给查询语句中的子查询命名,随后就可以在查询语句的其他地方引用这个名称。语句格式如下:

1 WITH AS (subquery_sql_statement)

2  SELECT FROM ;

在一个With语句中可以定义多个子查询名称,子查询名称可以在查询语句中多处反复引用,甚至前面定义的子查询名称可以为后面定义的子查询引用。

1 WITH AS

2   (select   from tableA),

3       AS

4   (select   from  alias_one)

5 SELECT

6 FROM ,

7 WHERE ;

2. With语句的优点

(1) Oracle通过将With子查询结果存储在用户临时表空间中,达到一次执行多次引用的目的,从而提高了查询效率。

(2) With语句使SQL的可读性增强。

3. With语句使用举例

1、查询出部门的总薪水大于所有部门平均总薪水的部门。

部门表s_dept,员工表s_emp。

分析:做这个查询,首先必须计算出所有部门的总薪水,然后计算出总薪水的平均薪水,再筛选出部门的总薪水大于所有部门总薪水平均薪水的部门。那么第1 步with 查询查出所有部门的总薪水,第2 步用with 从第1 步获得的结果表中查询出平均薪水,最后利用这两次的with 查询比较总薪水大于平均薪水的结果,如下:

1 WITH DEPT_COSTS AS –查询出部门的总工资

2  (SELECT D.DNAME, SUM(E.SAL) DEPT_TOTAL

3     FROM DEPT D, EMP E

4    WHERE E.DEPTNO = D.DEPTNO

5    GROUP BY D.DNAME),

6 AVE_COST AS   –查询出部门的平均工资,在后一个WITH语句中可以引用前一个定义的WITH语句

7  (SELECT SUM(DEPT_TOTAL) / COUNT(*) AVG_SUM FROM DEPT_COSTS)

8 SELECT *

9   FROM DEPT_COSTS DC10  WHERE DC.DEPT_TOTAL > (SELECT AC.AVG_SUM FROM AVE_COST AC)–进行比较

4. With使用注意事项

1. 注意语法格式

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

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

3)如果定义了with子句,而在查询中不使用,那么会报ora-32035 错误。

4)一个with子句内部不能嵌套with子句。

2.With子查询中的列应该加别名以便引用。

5.With语句的复杂用法

1. 一般我们只在顶层Select语句前定义With语句。

2. 实际上,SQL语句中凡是可以使用Select子查询的位置,如标量子查询、from后的子查询、insert、update中的子查询都可以使用With语句。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值