Oracle中的Views和With ... as子句之间有什么区别?

时间:2019-12-14 22:46:23

标签: sql oracle view with-clause

我的示例受Oracle网站启发 CREATE VIEW

-- ex1
with SAMP_V1 as (
    AS SELECT COMM + BONUS as COL_SUM, COMM - BONUS as COL_DIFF
    FROM SAMP.EMPLOYEE) 
select * from SAMP_V1;

-- ex2
CREATE VIEW SAMP.V1 (COL_SUM, COL_DIFF)
    AS SELECT COMM + BONUS, COMM - BONUS
    FROM SAMP.EMPLOYEE;

select * from SAMP.V1;

我注意到的唯一区别是ex1是用一个语句编写的,而ex2是分成两个语句的。 另外,我可以使用WITH选择整个集合的子集,但也可以使用VIEW来完成。

可以吗?

  • 只选择一次并且
  • VIEW是别名,因此每次提及SELECT都会重复一次

谢谢

1 个答案:

答案 0 :(得分:3)

viewwith子句肯定不是同一回事。

with子句生成仅在执行它的查询中存在的内联表(又名派生表)。

另一方面,view是一个合法的数据库对象,从某种意义上讲,它模拟一个表。视图由sql查询定义,因此它是一个虚拟表,可以像查询其他任何数据库表一样对其进行查询。在某些情况下,您甚至可以运行应用于基础表的DML操作或视图(更新,删除,插入)。

如果反复需要相同的with子句,则视图有助于缩短查询。