【数据库2-的视图使用】

例子

SELECT cust_name, cust_contact
FROM   customers, orders, orderitems
WHERE  customers.cust_id = orders.cust_id
    AND orderitems.order_num = order.order_num
    AND prod_id = 'TNT2';

视图可以将整个上述查询的得到的结果包装成一个新的虚拟表productcustmers

SELECT cust_name, cust_contact
FROM   productcustmers
WHERE  prod_id = 'TNT2';

这就是SQL的视图,他不包含任何表包含的是一个SQL查询

为什么要使用视图?

  • 重用SQL语句
  • 简化复杂的SQL操作,编写查询以后可以方便的重用而不需要知道查询的具体细节
  • 使用表的一部分而不是完整的表
  • 保护数据,可以给用户授予部分表的使用权限而不用全部给用户
  • 更改格式,视图可以返回与底层表不同的格式
    注意:视图就是查询不包含数据,因此使用视图时就会有查询消耗,部署大量视图的时候要注意做测试

视图的规则和使用限制

  • 与表格一样视图必须唯一命名
  • 视图的创建数目没有限制
  • 由数据库管理人员给与权限才可以使用视图创建
  • 视图可以嵌套,类似查询子句嵌套
  • ORDER BY可以使用,如果视图本身包含ORDER BY则新使用的将会覆盖原来的
  • 视图不能索引也不能有关联的触发器或默认值
  • 视图可以和一个表一起联结

创建视图

CREATE VIEW productcustomers AS
SELECT cust_name, cust_contact, prod_id
FROM customers, orders, orderitems
WHERE customers.cust_id = orders.cust_id
    AND orderitems.order_num = orders.order_num;

创建一个名为productcustomers视图,联结三个表,用来返回订购了任意产品的所有客户的列表。如果执行SELECT * FROM productcustomers,将列出订购了任意产品的客户。
若想检索订购了TNT2的客户:

SELECT cust_name, cust_contact
FROM productcustomers
WHERE prod_id = 'TNT2';

用视图更改检索数据的格式

CREATE VIEW vendorlocations AS
SELECT (concat(RTRIM(vend_name), '(', RTRIM(vend_country), ')')) 
    AS vend_title
FROM vendors
ORDER BY vend_name;

此视图可以检索出以创建所有邮件标签的信息:

SELECT *
FROM endorlocations;

用视图过滤不想要的数据

视图对于应用普通的WHERE子句也很有用。例如:可以定义一个视图过滤掉没有电子邮件地址的客户

CREATE VIEW customeremaillist AS
SELECT cust_id, cust_name, cust_email
FROM customers
WHERE cust_email IS NOT NULL;

使用视图与计算字段

将原先的查询创建为视图,后续对查询的使用就很方便

CREATE VIEW orderitemsexpanded AS
SELECT order_num, prod_id, quantity, item_pricce, quantity * item_pricce AS expanded_price
FROM orderitems;

再检索订单2005的详细内容

SELECT *
FROM orderitemsexpanded
WHERE order_num = 20005;

总结

视图时虚拟的表,本质是查询。其提供了对查询的封装,简化数据处理过程以及重新格式化基础数据或保护基础数据

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值