2016-01-21 30 views
0

我知道一个视图和子查询之间的主要区别在于,前者保存为你的数据库的元数据的一部分,以后可以完全凭借自己的某种虚拟表的使用:松散地说,可以将视图看作是一种子查询吗?

CREATE VIEW my_view AS 
    SELECT employee_firstname, 
      employee_lastname, 
      employee_salary 
    FROM employees; 

SELECT * FROM my_view; -- This SELECT statement will list all employees 
         -- along with their salaries, treating my_view as 
         -- its source of data 

但当我们使用视图作为更大查询的一部分时,你认为可以公平地说,从松散的角度来说,视图只不过是保存的子查询而已?我问这个问题,因为我注意到,很多次,我可以很容易地把我的子查询到的意见(只有这样才能让你的SQL代码更易读),并有相同的效果。

+0

不仅保存的子查询,但保存的子查询,你不能改变 - 即,如果某人创建其中列有限制的看法,你只能访问视图,而不是源数据库,你只需要限制数据访问。 – Smutje

+2

我投票结束这个问题作为题外话,因为它根本不是一个编程问题。 –

+0

这个问题有什么意义?在很多方面,一个视图就像一个子查询,并且可能会产生与子查询相同的计划,但是这可能太过于狭窄的描述。如果您有问题的理由可能会得出更合适的答案。如果你只是好奇,那么这个问题既过于宽泛,又以意见为基础。 –

回答

1

它实际上取决于,如果它是一个普通view,那么是的,它可以安全地说,它可以作为一个子查询时,您从中选择。如果是materialized view然后,而它仍然是在原则上依稀相似的,执行是一个有点不同。 A materialized view周期性地将执行结果集存储到磁盘中,产生一种形式的临时结果表。在这种情况下,它会比子查询更像实际的表。

1

当你做SELECT * FROM my_view;,它实际上是选择的数据库,将所有的表。这是您创建视图的选择的超链接。

相关问题