【问题标题】:Difference between SQL View and WITH clauseSQL View 和 WITH 子句的区别
【发布时间】:2012-05-27 08:01:29
【问题描述】:

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

【问题讨论】:

标签: sql sql-view


【解决方案1】:

SQL 视图和 with 子句非常相似。以下是一些差异。

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

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

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

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

【讨论】:

    【解决方案2】:

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

    否则,它们将基本相同。

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

    【讨论】:

    • 谢谢。视图的生命周期是否无限长,直到它被显式删除,因为它存储在数据库中?
    • 是的;视图定义存储在系统目录中,不像 CTE 对单个查询是私有的(尽管如果系统认为这可能有帮助,没有什么可以阻止系统保存 CTE,但大多数时候它可能没有多大帮助,如果有的话)。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-03-31
      • 2015-07-16
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多