oracle中with as语句的使用

一. with as 简介:

with as其实就是一个子查询, 使用它可以增强sql的可读性,同时因为该查询只执行一次,并将结果存储在用户临时表空间中,

可以多次引用,增强性能。


二. with as 用法:

with as学名为公用表表达式 - CTE, 使用它需要注意以下几点:

1. cte后面必须直接跟使用cte的sql语句, 如:select、insert、update,否则cte将失效

with temp as (
     select * from xxx
)
select * from temp;

2. cte后面可以跟其他的cte,但只能使用一个with,多个cte中间使用逗号分隔:

with temp1 as (  
     select * from xxx  
),
temp2 as(
     select * from yyy
)
select x.* from temp1 x, temp2 y where x.id = y.id 

三. with as 实战:

查询出部门的总薪水大于所有部门平均总薪水的部门:

部门表s_dept, 员工表s_emp;

-- step1:查询出部门名和部门的总薪水
with dept_costs as(
  select a.name,sum(b.salary) dept_total
     from
   s_dept a,s_emp b
     where a.id=b.dept_id
     group by a.name
),

-- step2:利用上一个with查询的结果,计算部门的平均总薪水
avg_costs as(
  select sum(dept_total)/count(*) dept_avg
  from dept_costs
)

-- step3:从两个with查询中比较并且输出查询结果
select name,dept_total
   from dept_costs
where
dept_total > (
  select dept_avg from avg_costs
)
order by name;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值