视图的常用作用总结

7 篇文章 0 订阅
5 篇文章 0 订阅

本文主要来源来《SQL必知必会》,案例的表格案例也来源于此书,大家可在这里下载对应数据库的表格创建源码http://www.forta.com/books/0672336073/

视图为虚拟的表。它们包含的不是数据而是根据需要检索数据的查询。视图提供了一种封装SELECT语句的方式,可用来简化数据处理,重新格式化或保护基础数据。

创建视图必须有DBA权限,因为视图主要用来查询,不建议用来修改数据,所以很多视图都创建为只读的:

CREATE VIEW view_name AS SELECT... WITH READ ONLY;

主要作用如下:

作用1:通过重用SQL语句,简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必知道其基本查询细节。
  1. 利用视图简化复杂的联结;
-- 返回已订购了任意产品的所有顾客的列表
SELECT cust_name, cust_contact, prod_id 
FROM customers, orders, orderitems
WHERE customers.cust_id=orders.cust_id
AND orders.order_num=orderitems.order_num;

-- 利用视图简化复杂的联结
CREATE VIEW ProductsCustomers AS
SELECT cust_name, cust_contact, prod_id 
FROM customers, orders, orderitems
WHERE customers.cust_id=orders.cust_id
AND orders.order_num=orderitems.order_num;

-- 查询
SELECT p.cust_name, p.cust_contact 
FROM ProductsCustomers p
WHERE p.prod_id='RGAN01';
  1. 用视图重新格式化检索出的数据;
-- 在单个组合计算列中返回供应商名和位置(oracle为||,mysql中为+)
SELECT RTRIM(vend_name) || '(' || RTRIM(vend_country) || ')' AS vend_title
FROM vendors
ORDER BY vend_name;

-- 用视图重新格式化检索出的数据
create view  VendorLocations as
SELECT RTRIM(vend_name) || '(' || RTRIM(vend_country) || ')' AS vend_title
FROM vendors
ORDER BY vend_name;

-- 查询
SELECT * FROM VendorLocations;
  1. 用视图过滤不想要的数据;
-- 用视图过滤不想要的数据
CREATE VIEW CustomerEmailList AS
SELECT cust_id, cust_name, cust_email
FROM customers
WHERE cust_email IS NOT NULL;

-- 查询
SELECT * FROM CustomerEmailList;
  1. 使用视图与计算字段
-- 使用视图与计算字段
CREATE VIEW OrderItemsExpanded AS
SELECT prod_id, 
	quantity, 
	item_price, 
	quantity*item_price AS expanded_price
FROM orderitems 
WHERE order_num=20008;

-- 查询
SELECT * FROM OrderItemsExpanded;

作用2:可以通过授予用户访问表的特定部分的权限,让用户使用表的一部分而不是整个表,屏蔽一些敏感字段。
-- 屏蔽customers.cust_email字段
CREATE VIEW ShieldingEmail AS
SELECT cust_id,cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country,cust_contact
FROM customers;
-- 查询
SELECT * FROM ShieldingEmail;

作用3:保证总部和分部数据及时统一

因为视图的创建数量是没有限制的,并且每个视图都与原始表保持同步,所以可以实现总部和分部数据及时统一。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值