視圖
視圖是虛擬的表。與包含的數據表不一樣,視圖只包含使用時動態檢索的數據查詢。作為視圖,他不包含任何列或數據,包含的只是一個查詢。
為什么使用視圖?
1:重用sql語句。
2:簡化復雜的sql操作。在編寫查詢后,可以方便的重用它而不必知道其基本查詢的細節。
3:使用表的一部分而不是整個表。
4:保護數據??梢允谟栌脩粼L問表的特定部分的權限,而不是對整個表進行訪問。
5:更改數據格式和表示。視圖可以返回與底層表的表示和格式不同的數據。
創建視圖之后,可以用于表基本相同的方式使用它們??梢詫σ晥D執行SELECT操作,過濾和排序數據,將視圖聯結到其他視圖或表。
重要的是,要知道視圖僅僅是用來查看存儲在別處數據的一種設置。視圖本身不包含數據,因此返回的數據是從其他表中檢索出來的。在添加和更改這些表中的數據的時候,視圖將返回改變過的數據。
關于視圖創建和使用的一些最常見的規則和限制
(1)與表一樣,視圖必須唯一命名
(2)對于可以穿件的視圖數目沒有限制
(3)為了創建視圖,必須具有足夠的訪問權限。這些權限通常由數據庫管理人員授予。
(4)視圖可以嵌套,即可以利用從其他視圖中檢索數據的查詢來構造一個視圖。
(5)許多DBMS禁止在視圖查詢中使用ORDER BY子句。
(6)有的DBMS要求命名返回的所有列,如果列是計算字段,則需要使用別名。
(7)視圖不能索引,也不能有關聯的觸發器或默認值。
(8)有的DBMS把視圖作為只讀的查詢,這表示可以從視圖檢索數據,但不能將數據寫會底層表。
(9)有的DBMS允許創建這樣的視圖,它不允許進行導致行不再屬于視圖的插入或更新。
創建視圖
視圖用CREATE VIEW語句來創建。
用DROP語句來刪除視圖,語法為:DROP VIEW viewname;
利用視圖簡化復雜的聯結
CREATE?VIEW?ProductCustomers?ASSELECT?cust_name,cust_contact,prod_idFROM?Customers,Orders, OrderItemsWHERE?Customers.cust_id?=?Order.cust_id?AND?OrderItems.order_num?=?Order.order_num;
這條語句創建一個名為ProductCustomers的視圖,他聯結三個表,以返回已訂購了任意產品的所有客戶的列表。
檢索訂購了產品RGAN01的客戶
SELECT?cust_name,cust_contactFROM?ProductCustomersWHERE?prod_id?=?'RGAN01';
用視圖重新格式化檢索出的數據
創建格式化視圖
CREATE?VIEW?VendorsLocations?ASSELECT?RTRM(vend_name)?||?'?(?'?||?RTRIM(vend_country)?||?'?)?'?AS?vend_titleFROM?Vendors;
用試圖過濾不想要的數據
定義CustomerEMailList 視圖,過濾沒有電子郵件地址的客戶。
CREATE?VIEW?CustomerEMailList?ASSELECT?cust_id,?cust_name,?cust_emailFROM?CustomersWHERE?cust_email?IS?NOT?NULL;
使用視圖與計算字段
檢索某個特定訂單中的物品,計算每種物品的總價格
CREATE?VIEW?OrderItemExpanded?ASSELECT?order_num,?prod_id,?quantity,?item_price,?quantity*item_price?AS?expanded_price FROM?OrderItems;
根據視圖檢索訂單20008的詳細內容
SELECT?*FROM?OrderItemsExpandedWHERE?order_num?=?20008;
?以上就是sql視圖 詳細介紹的內容,更多相關內容請關注php中文網(www.php.cn)!