首页 > 数据库开发 > oracle中with as语句的使用

oracle中with as语句的使用

一. with as 简介:

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

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

 

二. with as 用法:

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

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

[sql]

  1. with temp as (  
  2.      select * from xxx  
  3. )  
  4. select * from temp;  

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

[sql]

  1. with temp1 as (    
  2.      select * from xxx    
  3. ),  
  4. temp2 as(  
  5.      select * from yyy  
  6. )  
  7. select x.* from temp1 x, temp2 y where x.id = y.id   


三. with as 实战:

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

部门表s_dept, 员工表s_emp;

[sql]

  1. -- step1:查询出部门名和部门的总薪水  
  2. with dept_costs as(  
  3.   select a.name,sum(b.salary) dept_total  
  4.      from  
  5.    s_dept a,s_emp b  
  6.      where a.id=b.dept_id  
  7.      group by a.name  
  8. ),  
  9.   
  10. -- step2:利用上一个with查询的结果,计算部门的平均总薪水  
  11. avg_costs as(  
  12.   select sum(dept_total)/count(*) dept_avg  
  13.   from dept_costs  
  14. )  
  15.   
  16. -- step3:从两个with查询中比较并且输出查询结果  
  17. select name,dept_total  
  18.    from dept_costs  
  19. where  
  20. dept_total > (  
  21.   select dept_avg from avg_costs  
  22. )  
  23. order by name;  

本文固定链接: http://www.devba.com/index.php/archives/6067.html | 开发吧

报歉!评论已关闭.