什么是sql“视图”

时间:2019-09-23 00:48:05

标签: sql

我认为对于不同的数据库,定义可能有所不同(我在问题中标记了几个数据库),但是假设我有以下内容(以伪代码表示):

CREATE VIEW myview FROM
SELECT * FROM mytable GROUP BY name

然后我可以像这样查询视图:

SELECT * FROM myview WHERE name like 'bob%'

在这种情况下,“视图”到底在做什么?只是简写而已吗?

SELECT * FROM (
  SELECT * FROM mytable GROUP BY name
) myview WHERE name like 'bob%'

还是创建视图会保留存储(或内存,索引等等)?换句话说,创建和访问视图时会发生什么内部变化?

2 个答案:

答案 0 :(得分:2)

视图是引用存储的SQL查询的名称。引用时,查询的定义将在引用查询中替换。基本上是您所描述的简写。

视图是由标准定义的,并且在所有数据库中几乎都是相同的。

视图不会永久存储数据。每次引用它时,代码都会运行。一个警告是-在某些数据库中-视图可能是预编译的,因此预编译的代码实际上包含在查询计划中。

相比之下,某些数据库支持实例化视图。这些是非常不同的野兽,它们确实存储数据。

答案 1 :(得分:0)

其他观看原因:

  1. 并不是每个人都是SQL专家,因此数据库管理员可能会开发由多个表上的复杂联接组成的视图,以使用户可以轻松访问他们可能需要访问的数据,但可能不知道如何最好地做到这一点。

  2. 在某些数据库上,您还可以创建只读视图。同样,DBA可能会创建这些限制用户的操作,以限制用户可以对某些表执行的操作。

  3. DBA可能还会创建一个视图,以限制用户可以查看的表的哪些列。