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 来完成。
难道是:
- WITH select 只工作一次并且
- VIEW 是别名,因此每次提到它时都会重复 SELECT
谢谢
view
和 with
子句当然不是一回事。
with
子句生成一个内联 table(也称为派生 table),它只存在于它执行的查询中。
另一方面,view
是一个合法的数据库对象,从某种意义上说,它模拟了 table。视图由 sql 查询定义,因此它是一个虚拟 table,可以像任何其他数据库 table 一样查询。在某些情况下,您甚至可以 运行 DML 操作或视图(更新、删除、插入),它们应用于基础 tables。
如果您将重复需要相同的 with
子句,那么视图有助于缩短您的查询。
我的示例灵感来自 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 来完成。
难道是:
- WITH select 只工作一次并且
- VIEW 是别名,因此每次提到它时都会重复 SELECT
谢谢
view
和 with
子句当然不是一回事。
with
子句生成一个内联 table(也称为派生 table),它只存在于它执行的查询中。
另一方面,view
是一个合法的数据库对象,从某种意义上说,它模拟了 table。视图由 sql 查询定义,因此它是一个虚拟 table,可以像任何其他数据库 table 一样查询。在某些情况下,您甚至可以 运行 DML 操作或视图(更新、删除、插入),它们应用于基础 tables。
如果您将重复需要相同的 with
子句,那么视图有助于缩短您的查询。