2014-02-27 52 views
0

所以我相信在SQL中如果我想臨時創建一個新表並使用它來做一些查詢,我可以使用CREATE VIEW來創建一個「虛擬表「沒有物理數據,但可用於查詢並始終更新。想知道SQL中的'with'和'view'之間的區別

VS

WITH子句SQL允許你給一個子查詢塊的名稱呢?

如果有人可以向我解釋差異,將非常感謝你!

+0

[CTE和SubQuery之間的差異?](http://stackoverflow.com/questions/706972/difference-between-cte-and-subquery) – cha

+1

你可以用'WITH'做些什麼,你可以'與其他對象(視圖,表)做的是在一個語句中執行遞歸函數。即如果您有一個像遞歸式引用自己的表,就像員工組織結構或某種東西,那麼您可以編寫一個遞歸的CTE,它可以一直貫穿整個鏈。 http://technet.microsoft.com/en-us/library/ms186243(v=sql.105).aspx @Erwin已經提出了這一點,但我認爲值得強調。 –

+0

如果你告訴我們你正在使用哪個DBMS,這也可能有所幫助 –

回答

1

view是一個持久SELECT查詢可以由任何具有訪問權限和用戶權限的用戶調用。只是查詢是持久的(配方),而不是結果。你可以從它SELECT,就像你從表SELECT。根據您的RDBMS,您可以存儲其他屬性並管理訪問權限。
在一些RDBMS中,實現了對視圖的寫操作,並將這些操作轉發給基礎表。 (公用表表達式,a.k.a.「WITH子句」)與視圖相似,但只對其附加到的查詢可見並且不保留。各種RDBMS的實現存在差異。
subquery不同,CTE可以獨立地在多個查詢級別上重用。

A 臨時表是完全不同的東西。這是一個擁有自己數據的實際表格,只是在會話結束時(或者有時在交易結束時)沒有持續和丟失。

+0

因此,VIEW是子查詢,WITH是CTE?這意味着,在CTE更多是一次性使用協議的情況下,VIEW可以輕鬆地重複使用? – mathpun

+0

@ user3290443:是的,除了[子查詢](http://en.wikipedia.org/wiki/Subquery#Subqueries)不是*視圖。通常它是一個嵌套的'SELECT'語句,是更大查詢的一部分。我添加了一些鏈接到維基百科定義,因爲你的實際RDBMS是未知的。 –

1

如果你想創建一個臨時表,只需創建一個臨時表,並在它下降時,你用它做

CREATE TABLE #MyTable (Id INT) -- Add whatever other columns you need 
-- Populate the table as needed 
-- Run some queries 
DROP TABLE @MyTable 

視圖是用於非規範化的數據,以方便進行查詢(在一般情況下,不暫時的方式)。 SQL WITH子句用於將子查詢用作較大查詢的一部分,並且子查詢在較大查詢之外不可用。它們之間的主要區別是容易獲得的範圍(圖仍然存在VS子查詢是暫時的),以及附加的特徵存在下與次(如安全性,約束等)

相關問題