SQL(十七)视图(即虚拟的表,可简化之前的SQL操作)

入一点门

视图是什么

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
视图是一个lucky dog,所有实现提供一致的支持,不容易。

在这里插入图片描述
复杂视图的性能可能很差,小心。

用示例说明

假设要检索买了产品号为rgan01的产品的所有顾客,则按之前的方法,使用联结:

select cust_name, cust_contact
from customers, orders, orderitems
where customers.cust_id = orders.cust_id
and orderitems.order_num = orders.order_num
and prod_id = 'RGAN01';

在这里插入图片描述

如果我们可以把这个查询封装为一个叫做productsCustomers的虚拟表,则可以这么检索出相同的数据:

封装:

create view productscustomers 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;

在这里插入图片描述
封装后在mysql workbench左边可以看到这个视图
在这里插入图片描述
封装后,利用视图实现查询

select cust_name, cust_contact
from productsCustomers
where prod_id = 'RGAN01';

在这里插入图片描述
查询结果一样,但是视图的代码更加简单,想查别的产品随便改产品号即可

在这里插入图片描述
在这里插入图片描述
而且可重用
在这里插入图片描述


如果对视图执行下面的查询,则返回订购了任意产品的顾客,即只要买了产品都列出来

select * from productscustomers;

在这里插入图片描述

视图的常见应用

在这里插入图片描述

视图的规则

在这里插入图片描述

小结

到现在其实还是不太明白,因为例子只有一个,并且还没说怎么把一个查询封装为视图,只讲了规则和注意事项,没有经手完整示例还是不太明白

创建视图:create view(删除是drop view)

在这里插入图片描述
在这里插入图片描述
下面的几个示例都是视图常用的用途

示例1:用视图来简化复杂的联结

见第一节的用示例说明里的示例

示例2: 用视图格式化检索出的数据

select concat(vend_name, '(', vend_country, ')')
as vend_title
from vendors
order by vend_name;

在这里插入图片描述
在这里插入图片描述

create view vendorlocations as
select concat(vend_name, '(', vend_country, ')')
as vend_title
from vendors;

可以看到,用了两次as,一次是后面跟整个select查询,一次是后面跟计算字段的别名。
在这里插入图片描述
现在可以这样:

select * from vendorlocations;

在这里插入图片描述
但是下面的代码是错的,我企图对视图检索出的数据按供应商名称来排序结果:

select * from vendorlocations
order by vend_name;

在这里插入图片描述
可见视图 vendorlocations中果然没有列,没有数据,他根本不认识vend_name,vend_name是vendors表的列

示例3:用视图过滤掉不想要的数据

过滤出所有邮箱地址不为空的客户

create view CustomerEmailList as 
select cust_id, cust_name, cust_email
from customers
where cust_email is not null;

用视图过滤掉了邮箱地址为空的行,让他们不显示出来

select * from CustomerEmailList;

在这里插入图片描述

示例4:用视图简化计算字段的使用

查询一个订单中所有产品的相关信息:

select prod_id, 
	   quantity,
       item_price,
       quantity*item_price as expanded_price
from orderitems
where order_num = 20008;

在这里插入图片描述
可以把这个查询转换为一个视图:

create view OrderItemsExpanded as
select prod_id, 
	   quantity,
       item_price,
       quantity*item_price as expanded_price
from orderitems;

于是查询就可以变为:

select * 
from OrderItemsExpanded
where order_num = 20008;

在这里插入图片描述

注意,这里封装查询为视图时比上面直接用select多加了一个order_num,这一项是必须加的,因为只有加了,才可以用where order_num = 20008;,否则会报错说不认识order_num
在这里插入图片描述

小结

  • 一个视图只能有一个select语句

在这里插入图片描述
在这里插入图片描述

  • 视图主要是用来简化复杂操作的,包括计算字段,格式化,过滤等等。

大概有一些感觉了,但是还需要大量练习。明白了视图是查询,没有数据了,它只有select后面跟着的那些列,所有对视图用where子句的话只可以识别创建视图时select后面的那些列。

总结

在这里插入图片描述
提供了对select语句的封装层次,这个说的好,也感受到了,把一个select语句封装起来了,就可以复用这一个查询。

没想到SQL也有封装和复用的概念呢,果然好的思想在哪里都会有体现。

关键字

  • create view
  • drop view
  • as:在视图的创建中必用
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server中,视图(View)和(Table)是数据库中的两种不同类型的对象,它们有一些明显的区别。 首先,是数据库中存储数据的基本单位,它由一些列和行组成,每列定义了数据的类型和属性,每行示一个实体。中的数据可以通过SQL操作语句进行增删改查。 而视图虚拟,它是根据一个或多个查询语句定义的,它不存储数据,只提供了一种关于数据的逻辑视图。通过查询视图,可以将多个中的数据整合起来,方便用户进行查询和分析。视图本身可以像一样使用,可以用于数据读取、过滤和连接等操作。 其次,是实际存储数据的物理结构,数据的插入、更新和删除操作会直接影响本身,而视图只是查询语句的封装,对视图进行的操作实际上是对底层操作。 此外,视图还具有以下特点: 1. 视图可以隐藏底层的细节,保护数据的安全性。用户只能访问视图中允许显示的数据列,而不能直接访问底层。 2. 视图可以简化复杂的查询操作,通过提前对多个进行关联和筛选,减少了用户编写复杂查询语句的工作量。 3. 视图可以提供数据的逻辑展示,通过在视图中定义计算字段和筛选条件,可以生成更有用的数据展示形式。 总的来说,是实际存储数据的对象,而视图是对数据的逻辑示。视图可以整合数据、简化查询和保护数据,是SQL Server中非常常用和重要的对象。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值