with...as ...语句用于将查询语句定义为某个名称,并可以再后续的查询块中引用。当查询名称与已有的表名重复时,with定义的查询块优先级高。with语句可以定义多个查询,中间使用逗号分隔。常用于定于需要反复查询某些表的视图中,使用with语句把需要查询的表定义为查询快再使用比直接在视图中反复的查询表效率要高一些。个人觉得with..as..的作用是把会反复使用的表字段在查询块中预先查询出来,为这个查询块定义一个名称,作用类似于一个临时表。

  例子:

1
2
3
4
5
6
7
8
9
10
 
create 
or 
replace 
view 
test_with_as
 
as 
 
--定义with..as..查询块
 
with     
 
dept_info  
as
 
(
select 
dept_name,dept_id  
from 
dept),
 
employee_info 
as
 
(
select  
employee_name, employee_id, dept_id, salary   
from 
employee)
 
--调用with..as..中的查询块
 
select 
d.*,t.* 
from 
dept_info  d  
inner 
join 
employee_info  e 
on 
d.dept_id=e.dept_id;