SQL server 视图使用

本文探讨了在日常开发中,视图如何简化复杂多表查询,定制数据和提供聚合功能。同时,分析了视图的优缺点,如数据安全、性能影响以及修改限制,并明确了视图在特定条件下的DML操作限制。
摘要由CSDN通过智能技术生成

view日常使用场景

场景一:
有的时候,多个表并表条件查询,尤其是好几张表那种一起查询的那种,结果集来自“五湖四海”,也看不出那张表更“主要”一些,即使可能写出来对应的SQL那也是相当的痛苦,各种select包一层select套了好几层,不说维护理解,就是修改起来也很难受,感觉本来改了一个地方,突然发现结果集又有别的问题,就是那种按起了葫芦有起了瓢那种,处处都能给你带来“惊喜”。

场景二:
主体大多数字段大概来自一张表,但是关联好几个表,这也没什么,这时候业务同学会跟你谈,要加很多限制,比如说某个类型订单我们只要从某个时间段的,我们查找范围要限制在什么几个状态下的几种类型。这种如果是确定一个功能,经常会用的话,尽量单独拿出来维护。

这时候不管是多表视图还是单表视图都可能解决一些问题。

视图是什么,有啥优缺点?

视图咱不咬文嚼字也不去别的博客那边去拷贝复制,用大白话来解释,他其实可以看作一个表,一个“虚”表。“虚”到什么程度,别看他也有字段,但是它实际并没有储存字段数据,他的数据更多是来自组成他的其他的表(这些表也可以说是这个视图的基表)来存储的,微信公众号:我是坑货,徒有一个类似表的数据结构。

但从我们使用,甚至创建语句都和表非常相似,既然和我们之前使用的表差不多,他到底有啥过人之处呢?

视图的优点

使用视图可以定制化一些数据,限制范围,过滤条件,从这个视图得到的数据因为都限制过滤定制化处理了,方便你去分析

聚合函数,多个表连接展示

合并分离的数据,分区试图
这个我要多说一下,类似于多个表并称成一个表。类似于三国赤壁里面的铁索连舟,主要特征是里面的关键词union。
尤其是很多表因为设计的问题,尤其是实际上很多结构相似表,比如说有的系统租聘订单,赠品单,销售订单虽然意义不同,但是里面很多字段差不多都是一个意思,比如交易时间,订单编号,交易客户等。但是呢,也有各自的比较有特色独有的字段,比如租聘的时间长短,赠品关联的订单等一大堆多余出来的字段,其实也可以会根据需求在视图展示出来。

保证数据安全
这个涉及到视图到底能不能修改和怎么修改,限制是什么后面我会单独讲。

视图的缺点

首先视图是一个虚表,很多在表上性能优化的手法可能就没有,而且数据库引擎要构建视图有一个过程,类似一个查询,视图的性能以及优化你就不要又太高的要求。你可以把他看作一个查询,而不是一个表真的优化也最好基于查询的优化来优化可能好一些。

修改限制
视图不好修改,我建议最好别对视图修改,有什么问题最好还是对组成视图的基表来操作,而且有的视图在某些数据库或者某些条件下是不能修改的。微信公众号:我是坑货

视图能不能修改
这个问题其实没什么,但是很多博客抄来抄去,只提了一嘴“某些条件下”不能修改,到底是什么情况“才是某些条件呢”?甚至有的直接说不能,实际上是不严谨的。

首先视图是可以改的,但是在某些条件下是不能做某些更新操作,实际情况我整理搜集的如下:

l可以在简单视图中执行DML 操作
l当视图定义中包含以下元素之一时不能使用delete:
•组函数
•GROUPBY子句
•DISTINCT 关键字
ROWNUM 伪列


当视图定义中包含以下元素之一时不能使用update :

l组函数
lGROUP BY子句
lDISTINCT 关键字
lROWNUM 伪列
l列的定义为表达式

当视图定义中包含以下元素之一时不能使用insert :

l组函数
lGROUP BY 子句
lDISTINCT 关键字
lROWNUM 伪列
l列的定义为表达式
l表中非空的列在视图定义中未包括
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值