15

这里的任何人都可以告诉我 VIEW 和 WITH 的区别,因为我搜索了很多地方,但我找不到任何关于它的信息。
我的想法是 VIEW 和 WITH 是相同的,除了 VIEWs 被保存为模式对象,但我可能是错的

4

3 回答 3

16

SQL 视图和 with 子句非常相似。这里有一些区别。

视图在数据库中创建一个实际对象,具有相关的元数据和安全功能。With 语句只是单个查询的一部分。

在许多数据库中,视图都有选项,例如,对它们进行索引或“实例化”它们。

在某些数据库中,With 语句提供了使用递归 CTE 的机会。这对于视图是不可能的。

对于合并到查询中的简单子查询,它们非常相似。选择实际上取决于您是要创建可重用的代码(视图)还是专注于单个查询(with)。

于 2012-05-20T15:47:41.010 回答
5

从根本上说,视图的定义保存在数据库中,可以被任何查询重用,而 WITH 子句(或通用表表达式,或 CTE)与一个特定的查询相关联,只能通过复制来重用。

否则,它们将基本相同。

如果您使用递归 WITH 子句,那么您无法在 VIEW 中获得相同的结果,除非视图定义本身使用 WITH 子句(这是合法的)。

于 2012-05-20T15:45:23.830 回答
1

简而言之,WITH是 DML 中使用的子句,是VIEW数据库对象。视图定义可能包含使用WITH. 您可以将其视为WITH在主 DML 之前定义的派生表(在 Microsoft 术语中)或内联视图(在 Oracle 中)的变体,并且能够引用自身(递归查询)

WITH也用于 SQLServer 中的不同上下文(查询提示)。

于 2012-05-20T15:43:44.673 回答