SQL View和WITH子句之间的区别

时间:2012-05-20 15:31:56

标签: sql sql-view

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

3 个答案:

答案 0 :(得分:7)

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

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

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

在一些数据库中,语句提供了递归CTE的机会。这对于观点是不可能的。

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

答案 1 :(得分:3)

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

否则,它们将基本相同。

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

答案 2 :(得分:0)

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

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