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;