首頁 > 資料庫 > mysql教程 > SQL視圖 詳細介紹

SQL視圖 詳細介紹

黄舟
發布: 2017-02-27 13:34:42
原創
2574 人瀏覽過

檢視

檢視是虛擬的表。與包含的資料表不一樣,視圖只包含使用時動態檢索的資料查詢。作為視圖,他不包含任何列或數據,包含的只是一個查詢。

為什麼要使用視圖?

1:重複使用sql語句。

2:簡化複雜的sql操作。在編寫查詢後,可以方便的重複使用它而不必知道其基本查詢的細節。

3:使用表格的一部分而不是整個表格。

4:保護資料。可以授予使用者存取表的特定部分的權限,而不是對整個表進行存取。

5:更改資料格式和表示。視圖可以傳回與底層表的表示和格式不同的資料。

建立視圖之後,可以用於表格基本上相同的方式使用它們。可以對視圖執行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)!


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板