視圖的好處:
第一點:使用視圖,可以定制用戶數據,聚焦特定的數據。第一點:使用視圖,可以定制用戶數據,聚焦特定的數據。
在實際過程中,公司有不同角色的工作人員,我們以銷售公司為例的話,采購人員,可以需要一些與其有關的數據,而與他無關的數據,對他沒有任何意義,我們可以根據這一實際情況,專門為采購人員創建一個視圖,以后他在查詢數據時,只需select*fromview_caigou就可以啦。第二點:使用視圖,可以簡化數據操作。解釋:我們在使用查詢時,在很多時候我們要使用聚合函數,同時還要顯示其它字段的信息,可能還會需要關聯到其它表,這時寫的語句可能會很長,如果這個動作頻繁發生的話,我們可以創建視圖,這以后,我們只需要select*fromview1就可以啦~,是不是很方便呀~第三點:使用視圖,基表中的數據就有了一定的安全性因為視圖是虛擬的,物理上是不存在的,只是存儲了數據的集合,我們可以將基表中重要的字段信息,可以不通過視圖給用戶,視圖是動態的數據的集合,數據是隨著基表的更新而更新。同時,用戶對視圖,不可以隨意的更改和刪除,可以保證數據的安全性。第四點:可以合并分離的數據,創建分區視圖隨著社會的發展,公司的業務量的不斷的擴大,一個大公司,下屬都設有很多的分公司,為了管理方便,我們需要統一表的結構,定期查看各公司業務情況,而分別看各個公司的數據很不方便,沒有很好的可比性,如果將這些數據合并為一個表格里,就方便多啦,這時我們就可以使用union關鍵字,將各分公司的數據合并為一個視圖。
自己做的練習:
1 --SQL視圖的學習篇 2 3 --1.簡單視圖的創建 4 5 IF OBJECT_ID('Orders_View','V') IS NOT NULL 6 DROP VIEW Orders_View; 7 GO 8 CREATE VIEW [Orders_View] 9 AS10 SELECT dbo.Orders.OrderID,dbo.Customers.CustomerID FROM dbo.Orders INNER JOIN dbo.Customers11 ON Customers.CustomerID = Orders.CustomerID12 GO 13 14 --1.1視圖的使用15 SELECT * FROM Orders_View;16 17 18 --2.使用WITH ENCRYPTION,創建加密視圖19 IF OBJECT_ID('Region_View','V') IS NOT NULL20 DROP VIEW Region_View;21 GO22 CREATE VIEW Region_View23 WITH ENCRYPTION24 AS 25 SELECT R.RegionID AS R_ID, R.RegionDescription AS R_Desc FROM dbo.Region AS R26 INNER JOIN dbo.Territories27 ON Territories.RegionID = R.RegionID28 GO 29 30 --2.1使用視圖31 SELECT * FROM Region_View;32 33 --2.2加密視圖之后,執行下面的語句嗎,得到的文本是,這個對象已經加密34 EXEC sp_helptext Region_View;35 36 37 --3.使用 WITH CHECK OPTION,并允許對數據進行修改38 IF OBJECT_ID('View_Hello','V') IS NOT NULL 39 DROP VIEW View_Hello;40 GO 41 CREATE VIEW View_Hello42 AS 43 SELECT O.OrderID,C.ContactName,C.City,E.LastName,E.FirstName,S.CompanyName FROM dbo.Orders AS O44 INNER JOIN dbo.Customers AS C ON C.CustomerID = O.CustomerID45 INNER JOIN dbo.Employees AS E ON E.EmployeeID = O.EmployeeID46 INNER JOIN dbo.Shippers AS S ON S.ShipperID = O.ShipVia47 WHERE c.City='London'48 WITH CHECK OPTION;49 GO 50 51 --視圖的使用52 SELECT * FROM View_Hello;53 54 --測試用55 SELECT * FROM dbo.Customers WHERE City='London';56 --測試用57 UPDATE dbo.Customers SET city='London' WHERE City='AAAAAA'58 59 60 --4.使用視圖中的內置函數61 62 IF OBJECT_ID('Orders_GetDate','V') IS NOT NULL63 DROP VIEW Orders_GetDate;64 GO 65 CREATE VIEW Orders_GetDate66 AS 67 SELECT TOP (50) OrderID,SUM(Freight) AS aaa FROM dbo.Orders68 WHERE OrderDate>CONVERT(DATETIME,'1996-08-01') 69 GROUP BY OrderID70 GO 71 72 --使用視圖73 SELECT* FROM Orders_GetDate;
新聞熱點
疑難解答