博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql笔记(19)--使用视图
阅读量:3957 次
发布时间:2019-05-24

本文共 1555 字,大约阅读时间需要 5 分钟。

什么是视图?

  • 它不包含表中应该有的任何列或数据,它包含的是一个SQL查询,貌似也叫作虚拟表。
  • 视图仅仅是用来查看存储在别处的数据的一种设施。视图本身不包含数据,因此它们返回的数据是从其他表中检索出来的。在添加或更改这些表中的数据时,视图将返回改变过的数据。
  • 因为视图不包含数据,所以每次使用视图时,都必须处理查询执行时所需的任一个检索。视图影响性能。

为何要使用视图?

在这里插入图片描述

在视图创建之后,可以用与表基本相同的方式利用它们。可以对视图执行SELECT操作,过滤和排序数据,将视图联结到其他视图或表,甚至能添加和更新数据。

在这里插入图片描述

创建、操作视图

在这里插入图片描述

CREATE VIEW productcustomers AS SELECT cust_name ,cust_contact ,prod_idFROM customers c ,orders o ,orderitems otWHERE 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_titleFROM vendorsORDER 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_priceFROM orderitems o ;

在这里插入图片描述

之后特定查询计算字段就方便许多:

SELECT *FROM orderitemsexpandes o WHERE order_num = 20005;

在这里插入图片描述

一般,应该将视图用于检索(SELECT语句)而不用于更新(INSERT、UPDATE和DELETE)。虽然可以但是有限制:当视图有以下操作时,不能更新视图。

视图本身没有数据,如果你对视图增加或删除行,实际上是对其基表增加或删除行。

在这里插入图片描述

总结:

视图为虚拟的表。它们包含的不是数据而是根据需要检索数据的查询

视图提供了一种MySQL的SELECT语句层次的封装,可用来简化数据处理以及重新格式化基础数据或保护基础数据

创建视图:使用 CREATE VIEW 虚拟表名 AS 后接 select 查询语句

视图可以的操作和普通表的查询操作一样,区别在于视图为了方便复用sql语局,是一个封装,类似API,给人更方便调用来查询。

转载地址:http://fpozi.baihongyu.com/

你可能感兴趣的文章
wireshark检索命令
查看>>
五人分鱼问题(附答案)
查看>>
linux查看文件有多少行
查看>>
error:previous declartion of "XXX" is here的解决方法
查看>>
sha1的几个函数的使用
查看>>
为什么int型的数组用memset不能清零(memset的使用规范)
查看>>
<转>CRC校验、MD5、SHA1算法的概念和可靠性现状
查看>>
linux杀死进程详解
查看>>
字符串表示的IP地址与点分式表示的IP地址间的相互转化
查看>>
implicit declaration of function 这种警告问题的原因及解决方法
查看>>
utorrent如何处理占资源过大的问题
查看>>
<好文分享>妖怪和和尚过河问题
查看>>
uTP协议的前世今生(from wikipedia)
查看>>
uTP协议的前世今生(from wikipedia)
查看>>
utp的包头格式<2>
查看>>
开源搜索引擎的比较(收藏几个博客文章)最近要做搜索系统的研究方向
查看>>
asii码表
查看>>
<读书笔记>WebUsage Mining:Discovery and Applications of Usage Patterns from Web Data
查看>>
并查集(Disjoint Sets)
查看>>
在Linux下安装MATLAB
查看>>