SQL SERVER 数据库视图使用与介绍

什么是视图?

在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。

视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。

视图的优点

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

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

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

视图的缺点

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

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

创建视图 

 创建视图是使用CREATE CIEW语句。和CREATE TABLE 语句是一样的,CREATE CLEW 语句只能创建不存在的视图。

使用CREATE CIEW 语句创建视图如下:

CREATE VIEW 视图名称 [定义视图中的字段]

AS --指定视图要执行的操作
select --查询语句该语句可以引用多个表或者其他视图
GO --结束语句

删除视图

通过 DROP VIEW 语句可以删除数据库中不需要的视图。该语句与 DROP TABLE 语句有所不同,DROP VIEW 语句并不删除任何数据表或数据。当删除一个视图时,只是从系统中删除了该视图的定义(视图名称及定义的SELEXT 语句)。如果以后再需要该视图,只要使用 CREATE VIEW语句重新创建该视图即可。

使用DROP BIEW删除视图:

DROP VIEW 数据库名称

如果要删除更多的视图:
DROP VIEW 数据库名称;数据库名称

视图简单查询

前面说了视图是一个虚表,那么我们在创建好了视图查询时就和SQL SERVER 中的表使用一样的方法即可:

SELECT *FROM 视图名称 WERVER  列='值'

视图示范:

CREATE VIEW groundwor
as
select
k3.FNumber  as 客户代码  ,
SUM(k.FEndBalance) 余额
 from(
 select r.FAccountID,r.FDetailID,SUM(FEndBalance) as FEndBalance
from (
select u1.FAccountID,u1.FDetailID,u1.FEndBalance*t1.FDC as FEndBalance
from  [SQL].AIS.dbo.t_Balance  u1 
inner join [SQL].AIS2.dbo. t_Account t1 on u1.FAccountID=t1.FAccountID
where u1.FAccountID in 
(select a.FAccountID from  [SQL].AIS2.dbo.t_Account a inner join [SQL].AIS2.dbo.t_ItemDetail b on a.FDetailID=b.FDetailID and b.F1<>0)
and  FYear=(select FValue from [SQL].AIS.dbo.t_SystemProfile where Fkey='CurrentYear' and FCategory='GL') and FPeriod=(select FValue from [SQLA].AIS.dbo.t_SystemProfile where Fkey='CurrentPeriod'
and FCategory='GL') and u1.FCurrencyID=0 and u1.FDetailID<>0
union all
select t1.FAccountID,t1.FDetailID,(CASE WHEN t1.FDC=1 THEN 1 ELSE -1 END)*FAmount*t2.FDC  as FEndBalance from [SQLAG].AIS.dbo.t_Voucher u1
inner join  [SQL].AI.dbo.t_VoucherEntry t1 on u1.FVoucherID=t1.FVoucherID
inner join [SQL].AIS.dbo. t_Account t2 on t2.FAccountID=t1.FAccountID 
where t1.FAccountID in (select a.FAccountID from  [SQL].AIS20080326210553.dbo.t_Account a inner join [SQL].AIS.dbo. t_ItemDetail b on a.FDetailID=b.FDetailID and b.F1<>0)
and u1.FPosted=0) r group by r.FAccountID,r.FDetailID) k
inner join [SQL].AIS.dbo.t_ItemDetail k1 on k1.FDetailID=k.FDetailID
inner join [SQL].AIS.dbo.t_Account k2  on k2.FAccountID=k.FAccountID AND  k2.FNumber LIKE '1122.%'
inner join [SQL].AIS.dbo.t_Item k3 on k3.FItemID=k1.F1
WHERE k.FEndBalance<>0 and K3.FNumber in ('01.01',
'01.01.001',
'01.01.009',
'01.01.005',
'01.01.004')
group by k3.FNumber
go

查询视图

--视图和表联查
SeLECT * FROM groundwor a
inner join (
select  top 100 percent B.FNUMBER,A.F_JLSZ_XYED FROM ora_t_Cust_Entry100019 A 
INNER JOIN T_BD_CUSTOMER B ON A.F_JLSZ_KHDM=B.FCUSTID and B.FNUMBER IN('01.01.003',
'01.01.001',
'01.01.009',
'01.01.005',
'01.01.004')
ORDER BY A.F_JLSZ_KHDM) D ON a.客户代码=D.FNUMBER



--top 100 percent 就是显示全部数据

如果大家觉得有帮助到你请点赞一下,谢谢了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值