什么是sql;“视图”;

什么是sql;“视图”;,sql,Sql,我假设不同数据库的定义可能不同(我在问题中标记了一些数据库),但假设我有以下内容(伪代码): 然后我可以这样查询视图: SELECT * FROM myview WHERE name like 'bob%' 在这种情况下,“视图”究竟在做什么?这是否只是一个简写,与执行以下操作相同: SELECT * FROM ( SELECT * FROM mytable GROUP BY name ) myview WHERE name like 'bob%' 或者创建视图是否保留存储(或内存、索引

我假设不同数据库的定义可能不同(我在问题中标记了一些数据库),但假设我有以下内容(伪代码):

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

SELECT * FROM myview WHERE name like 'bob%'
在这种情况下,“视图”究竟在做什么?这是否只是一个简写,与执行以下操作相同:

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

或者创建视图是否保留存储(或内存、索引等)?换句话说,当创建和访问视图时,会发生什么?视图是指存储的SQL查询的名称。被引用时,将在引用查询中替换查询的定义。这基本上是你描述的速记

视图是由标准定义的,在所有数据库中几乎都是一样的

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


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

视图的其他一些原因:

  • 并非所有人都是SQL专家,因此数据库管理员可能会开发由多个表上的复杂联接组成的视图,以便用户轻松访问他们可能需要访问的数据,但可能不知道如何最好地访问这些数据

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

  • DBA还可以创建一个视图来限制用户可以看到表中的哪些列


  • 谢谢你的回答。是否也有一个保存数据的“物化视图”,或者有多少种不同类型的“视图”?@David542。我想说,物化视图与视图完全不同。两者都是由查询定义的。但是物化视图是特定于数据库的,可能是最新的,也可能不是最新的(它们可能按计划运行),并且通常会限制查询所允许的功能。视图实际上只是一个固定查询。视图是否会存储查询的元数据(如查询执行计划),这样就不必每次都重新运行该元数据,或者它实际上只是获取视图的名称并用固定查询替换?i、 e.“别名”aquery@David542 . . . 这是一个依赖于数据库的实现细节。
    SELECT * FROM (
      SELECT * FROM mytable GROUP BY name
    ) myview WHERE name like 'bob%'