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

What is the difference between Views and With ... as clause in Oracle?

我的示例灵感来自 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 来处理整个集合的 select 个子集,但我也可以使用 VIEW 来完成。

难道是:

谢谢

viewwith 子句当然不是一回事。

with 子句生成一个内联 table(也称为派生 table),它只存在于它执行的查询中。

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

如果您将重复需要相同的 with 子句,那么视图有助于缩短您的查询。