SQL——视图

视图

概念

​ 像是虚拟的表,是包含根据需要检索数据的查询(创建视图后,它的定义就保存在数据库中,但是视图返回的真实数据不会从底层表分离出来)

​ 视图是持久的,而不是临时的,一旦创建了视图,可以持续的引用视图,直到删除它为止

用途(优点)-增加了访问数据的灵活行

  • 可以用以简化数据访问,减少关联查询的复杂性
  • 可以增加可复用性(将经常需要连接表的查询创建视图)
  • 可以正确的格式化数据(将需要的列转换成正确的格式,之后使用时引用视图即可)
  • 可以创建计算的列(将需要计算的列的计算结果创建为视图,需要时直接引用视图)
  • 可以用来重新命名列的名称(对不好理解的列名进行重命名)
  • 可以创建数据子集(将经常需要查询范围的数据查询创建为视图)
  • 可以用来加强安全性限制(对视图授予执行权限,限制最终用户直接访问表的权限,通过在视图定义中仅仅包含必要的列,暴露那些仅仅希望被最终用户看到的列)

需注意的点(缺点)

  • 像select查询一样要对视图进行性能调优,因为普通视图从本质上说是一个“已存储的”查询,性能更糟糕的视图会严重影响服务器的性能
  • 不要嵌套视图超过一级。具体来说,不要定义一个调用另外一个视图的是视图。当希望对性能地下的查询进行调优时,这么做会因此混乱,而且会降低每个嵌套级别的性能-+
  • 如果可能的话,使用存储过程而不用视图。因为存储过程能重用执行计划,性能会有提升。存储过程也能减少网络流量,并可以实现更复杂的业务逻辑,而且比视图有更少的编码设置
  • select允许一个试图定义最多包含1024个列。
  • 不可以在视图定义中使用某些select元素,包括into、option、compute、compute by或者对表或临时表的引用

分类

普通视图

描述

​ 由T-SQL查询定义。在数据苦衷不保存实际数据,只是视图定义

创建视图
--判断View1视图是否已经存在
if exists (select * from sys.views where name='View1')
drop view View1;
go 

--创建View1视图
create view View1
AS
	select a.gdsid,a.gdscde,a.gdsname,a.clsid,b.clscd,b.clsname
	from info_goods a
	inner join info_cls b on a.clsid=b.clsid  
go	
修改视图
--修改视图名称
alter view View1 As selectView

--修改视图内容
alter view selectView
AS
	select a.gdsid,a.gdscde,a.gdsname,a.clsid,b.clscd,b.clsname
	from info_goods a
	inner join info_cls b on a.clsid=b.clsid and b.clscd not in('01','02')
	
删除视图
drop view selectView

分区视图

  • 是对于分表的一个方案,允许将大型表中的数据拆分成较小的成员表。
  • 可以允许分布在不同Sql server实例的两个或多个水平分区表创建单个逻辑表现(视图)
  • 是通过对成员表使用 UNION ALL 所定义的视图,这些成员表的表结构相同,但作为多个表分别存储在同一个 SQL Server实例或称为联合数据库服务器的自主 SQL Server 服务器实例组中。
创建分区视图:

​ 要创建一个分区视图,需要根据Check约束中定义一组值吧达标分割成更小的表。Check约束确保每一个更小的表保存的数据唯一。然后使用union all创建分布式分区视图,把所有小表联结成单独的结果集。

--声明使用数据库
use test
go

--判断doodsView视图是否已经存在
if exists (select * from sys.views where name='goodsView')
drop view goodsView;
go

--创建分区视图
create view 
dbo.goodsView    -- dbo ==> 视图所属架构的名称
(gdsid,gdscd,gdsname) --视图制定的列,如果未指定 column,则视图列将获得与 SELECT 语句中的列相同的名称
with 
encryption,  --使用范围,  encryption可以防止SQL server在复制过程中发布视图
view_metadata   --view_metadata创建的视图,浏览模式的元数据在描述结果集内视图中的列时,将返回视图名,而不返回基表名。
as
	select a.billdate,a.tid,a.bcd,a.rebillno,a.rebcd from tcmis_test.dbo.b_flow_1811 As a
	union all
	select b.billdate,b.tid,b.bcd,b.rebillno,b.rebcd from tcmis_test.dbo.b_flow_1812 As b
go
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值