MySQL 视图

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

目录

视图

为什么使用视图

视图的规则和限制

使用视图

创建视图

简化复杂的联结

重新格式化检索出的数据

过滤数据

视图计算字段

删除视图

总结


视图

视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。

比如:如果想查询某个歌手下的所有歌曲,所以使用了两表联结,SQL如下:

SELECT
	player_singler.id,
	player_singler.name,
	player_singe.name AS sname,
	player_singe.addtime
FROM
	player_singe,
	player_singler
WHERE
	player_singe.singler_id = player_singler.id
AND player_singler.name = '周杰伦'

任何人想使用上述的SQL语句,查询某个歌手下的歌曲都必须理解相关表结构,并且知道如何创建查询和对表进行联结。为了查询其他歌手,必须修改最后的where子句。

但是通过把整个查询包装成一个名为play_singe_singler的虚拟表,则可以轻松的查询出相同的数据,如下:

SELECT
	id,
	name,
	sname
FROM
	play_singe_singler
WHERE
	NAME = '周杰伦'

这就是视图的作用。play_singe_singler是一个视图,不包含表中应该有的任何列或数据,它包含的是一个SQL查询(与用以正确联结表的相同的查询)。

为什么使用视图

视图的一些常见应用:

1.重用SOL语句。

2.简化复杂的SQL操作。在编写查询后,可以更方便地重用它而不用探究查询细节。

3.使用表的组成部分而不是整个表。

4.保护数据。可以给用户授权表的特定部分的访问权限。

5.更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。

在视图创建之后,可以用与表基本相同的方式利用它们。可以对视图执行SELECT操作,过滤和排序数据,将视图联结到其他视图或表,甚至能添加和更新数据(添加和更新数据存在某些限制)。因为它们返回的数据是从其他表中检索出来的,在添加或更改这些表中的数据时,视图的数据也将改变。

视图的规则和限制

视图创建和使用的常见规则和限制:

1.与表一样,视图必须唯一命名(不能与视图或表名称重复)。

2.创建的视图数目没有限制。

3.创建视图,必须具有足够的访问权限。

4.视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造一个视图。

5.ORDERBY可以用在视图中,但如果从该视图检索数据SELECT中也含有ORDERBY,那么该视图中的ORDERBY将被覆盖。

6.视图不能索引,也不能有关联的触发器或默认值。

7.视图可以和表一起使用。如:编写一条表和视图联结的SELECT语句。

使用视图

在理解视图和视图的规则、限制后,查看如何创建视图。

创建视图

1.视图用CREATE VIEW语句来创建。

2.使用SHOW CREATE VIEW viewname;来查看创建视图的语句

3.用DROP删除视图,其语法为DROP VIEW viewname;

4.更新视图时,可以先用DROP再用CREATE,也可以直接用CREATEOR REPLACE VIEW。如果要更新的视图不存在,则第2条更新语句会创建一个视图;如果要更新的视图存在,则第2条更新语句会替换原有视图。

简化复杂的联结

视图最常用的应用之一是隐藏复杂的SQL,这通常都会涉及联结。如下:

CREATE VIEW play_singe_singler AS SELECT
	player_singler.id,
	player_singler.name,
	player_singe.name AS sname,
	player_singe.addtime
FROM
	player_singe,
	player_singler
WHERE
	player_singe.singler_id = player_singler.id;

这条语句创建一个名为play_singe_singler的视图,它联结两个表,返回任意单曲的所有歌手列表。如果执行SELECT * FROM play_singe_singler,将列出任意单曲的歌手列表。

比如查询歌手周深的单曲,可如下进行:

SELECT
	id,
	name,
	sname
FROM
	play_singe_singler
WHERE
	name = '周深';

运行结果:

重新格式化检索出的数据

视图的另一个常见应用是重新格式化检索出的数据。下面的SELECT语句在单个组合计算列中返回歌手和单曲格式化数据。

SELECT
	player_singler.id,
	concat(player_singe.name, '(', player_singler.name, ')') as title
FROM
	player_singe,
	player_singler
WHERE
	player_singe.singler_id = player_singler.id;

运行结果:

假如经常需要这个格式的结果。就可以创建一个视图,每次需要时使用它即可。

此语句转换为视图,可按如下进行:

CREATE VIEW play_singe_singler2 AS SELECT
	player_singler.id,
	concat(player_singe.name, '(', player_singler.name, ')') as title
FROM
	player_singe,
	player_singler
WHERE
	player_singe.singler_id = player_singler.id;

还是使用CREATE VIEW方式查询创建视图。

创建后检索数据,即可按照如下方式进行:

SELECT * FROM play_singe_singler2;

 

过滤数据

还可以定义一个singlermanysinge视图,它过滤掉单曲少于2个的歌手。

为达到此目的,可使用以下语句:

CREATE VIEW singlermanysinge AS SELECT
	id,
	NAME,
	singe_num
FROM
	player_singler
WHERE
	singe_num > 1;

这样在使用SELECT语句:SELECT * FROM singlermanysinge查询时,

即可过滤掉单曲少于2首的歌手,返回的都是大于1首的歌手列表,如下图:

提示:如果从视图检索数据时又使用了一条where子句,则两组子句将自动组合。

视图计算字段

视图对于简化计算字段的使用也特别有用。下面介绍一条SELECT语句,它检索某个特定订单中的物品,计算每个物品的总价格:

SELECT
	orderNum,
	price,
	num,
	price * num AS product_price
FROM
	`product_order_spare`;

运行结果:

将其转换为一个视图,按如下进行:

CREATE VIEW orderproductprice AS SELECT
	orderNum,
	price,
	num,
	price * num AS product_price
FROM
	`product_order_spare`;

创建视图后,如想检索订单编号为20210224140918225910订单的产品信息时,

可按如下进行:

SELECT * FROM orderproductprice WHERE orderNum = '20210224140918225910';

运行结果:

 

删除视图

删除视图与删除表语句相似,都是使用DROP,不过后面跟的是VIEW。如下:

DROP VIEW play_singe_singler;

 

总结

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JSON_L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值