2016-01-21 41 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;,它實際上是選擇的數據庫,將所有的表。這是您創建視圖的選擇的超鏈接。

相關問題