mysql笔记(19)--使用视图
Posted HardyDragon_CC
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql笔记(19)--使用视图相关的知识,希望对你有一定的参考价值。
什么是视图?
- 它不包含表中应该有的任何列或数据,它包含的是一个SQL查询,貌似也叫作虚拟表。
- 视图仅仅是用来查看存储在别处的数据的一种设施。视图本身不包含数据,因此它们返回的数据是从其他表中检索出来的。在添加或更改这些表中的数据时,视图将返回改变过的数据。
- 因为视图不包含数据,所以每次使用视图时,都必须处理查询执行时所需的任一个检索。视图影响性能。
为何要使用视图?
在视图创建之后,可以用与表基本相同的方式利用它们。可以对视图执行SELECT操作,过滤和排序数据,将视图联结到其他视图或表,甚至能添加和更新数据。
创建、操作视图
CREATE VIEW productcustomers AS
SELECT cust_name ,cust_contact ,prod_id
FROM customers c ,orders o ,orderitems ot
WHERE c.cust_id = o.cust_id
AND ot.order_num = o.order_num;
这条语句创建一个名为productcustomers的视图,它联结三个表,以返回已订购了任意产品的所有客户的列表
使用视图查询数据:检索订购了产品TNT2的客户
- 利用视图,可一次性编写基础的SQL,然后根据需要多次使用;例如这里的视图就相当于重复使用了联结
SELECT cust_name ,cust_contact
FROM productcustomers p
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 vendorlocations v ;
原本的数据:
可以利用视图过滤数据:例如过滤没有电子邮件地址的客户
CREATE VIEW customeremaillist AS
SELECT cust_id ,cust_name ,cust_email
FROM customers c
WHERE cust_email IS NOT NULL ;
当然也可以使用视图来计算字段:
CREATE VIEW orderitemsexpandes AS
SELECT order_num ,
prod_id ,
quantity,
item_price,
quantity * item_price AS expanded_price
FROM orderitems o ;
之后特定查询计算字段就方便许多:
SELECT *
FROM orderitemsexpandes o
WHERE order_num = 20005;
一般,应该将视图用于检索(SELECT语句)而不用于更新(INSERT、UPDATE和DELETE)。虽然可以但是有限制:当视图有以下操作时,不能更新视图。
视图本身没有数据,如果你对视图增加或删除行,实际上是对其基表增加或删除行。
总结:
视图为虚拟的表。它们包含的不是数据而是根据需要检索数据的查询。
视图提供了一种mysql的SELECT语句层次的封装,可用来简化数据处理以及重新格式化基础数据或保护基础数据
创建视图:使用 CREATE VIEW 虚拟表名 AS 后接 select 查询语句
视图可以的操作和普通表的查询操作一样,区别在于视图为了方便复用sql语局,是一个封装,类似API,给人更方便调用来查询。
以上是关于mysql笔记(19)--使用视图的主要内容,如果未能解决你的问题,请参考以下文章