檢視
檢視是虛擬的表。與包含的資料表不一樣,視圖只包含使用時動態檢索的資料查詢。作為視圖,他不包含任何列或數據,包含的只是一個查詢。
為什麼要使用視圖?
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中文网(m.sbmmt.com)!