sql视图学习笔记--视图
视图是为用户对数据多种显示需求而创建的,其主要用在一下几种情况: (1)限制用户只能访问特定表特定条件的内容,提高系统的安全性。 (2)隐藏表结构、创建多种形式的数透视,满足不同用户需求。 (3)将复杂的SELECT语句和表JION形成一个视图,给用户提供一个良好的接口。 (4)为使用频率较高的联表聚合运算创建索引视图,以提升程序的性能。 (5)创建分区视图调用远程数据,实现数据的分布式存储与查询,提升程序的吞吐能力。
一了解视图 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图在数据库中并不是以数据值存储集形式存在,除非是索引视图。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。 对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其他数据库的一个或多个表,或者其他视图。分布式查询也可用于定义使用多个异类源数据的视图。例如,如果有多台不同的服务器分别存储您的单位在不同地区的数据,而您需要将这些服务器上结构相似的数据组合起来,这种方式就很有用。
二、视图类型 在 SQL Server 2005 中,您可以创建标准视图、索引视图和分区视图。 标准视图 标准视图组合了一个或多个表中的数据,您可以获得使用视图的大多数好处,包括将重点放在特定数据上及简化数据操作。 索引视图 索引视图是被具体化了的视图,即它已经过计算并存储。可以为视图创建索引,即对视图创建一个唯一的聚集索引。索引视图可以显著提高某些类型查询的性能。索引视图尤其适于聚合许多行的查询。但它们不太适于经常更新的基本数据集。 分区视图 分区视图在一台或多台服务器间水平连接一组成员表中的分区数据。这样,数据看上去如同来自于一个表。联接同一个 SQL Server 实例中的成员表的视图是一个本地分区视图。
三、使用视图的情况 视图通常用来集中、简化和自定义每个用户对数据库的不同认识。视图可用作安全机制,方法是允许用户通过视图访问数据,而不授予用户直接访问视图基础表的权限。视图可用于提供向后兼容接口来模拟曾经存在但其架构已更改的表。还可以在向 Microsoft SQL Server 2005 复制数据和从其中复制数据时使用视图,以便提高性能并对数据进行分区。 着重于特定数据视图使用户能够着重于他们所感兴趣的特定数据和所负责的特定任务。不必要的数据或敏感数据可以不出现在视图中。例如, AdventureWorks 示例数据库中的视图 vBikes 允许用户查看当前库存的所有自行车的名称。该视图将从 Product 表中筛选掉除 Name 之外的所有字段,并仅返回自行车成品的名称,而不是自行车配件的名称。
简化数据操作 视图可以简化用户处理数据的方式。可以将常用联接、投影、UNION 查询和 SELECT 查询定义为视图,以便使用户不必在每次对该数据执行附加操作时指定所有条件和条件限定。例如,可以将一个用于报表目的且执行子查询、外联接和聚合来从一组表中检索数据的复杂查询创建为视图。视图简化了对数据的访问,因为每次生成报表时无需编写或提交基础查询,而是查询视图。有关对数据进行操作的详细信息,请参阅查询基础知识。 尽管不是复杂查询, AdventureWorks 示例数据库中的视图 vBikes 仍允许用户着重于特定数据,而不必构造生成视图所需的 JOIN 子句。 还可以创建用户定义的内联函数,在逻辑上作为参数化视图运行,或者作为在 WHERE 子句搜索条件或查询的其他部分中含有参数的视图运行。 提供向后兼容性 视图使您能够在表的架构更改时为表创建向后兼容接口。例如,一个应用程序可能引用了具有以下架构的非规范化表: Employee(Name, BirthDate, Salary, Department, BuildingName) 若要避免在数据库中重复存储数据,可以通过将该表拆分为下列两个表来规范化该表: Employee2(Name, BirthDate, Salary, DeptId) Department(DeptId, BuildingName) 若要提供仍然可引用 Employee 中数据的向后兼容接口,可以删除旧的 Employee 表并以以下视图中的内容替换它: 自定义数据 视图允许用户以不同方式查看数据,即使在他们同时使用相同的数据时也是如此。这在具有许多不同目的和技术水平的用户共用同一数据库时尤其有用。例如,可创建一个视图以仅检索由客户经理处理的客户数据。该视图可以根据使用它的客户经理的登录 ID 决定检索哪些数据 导出和导入数据 可使用视图将数据导出到其他应用程序。例如,您可能希望使用 AdventureWorks 数据库中的 Customer 和 SalesOrderHeader 表在 Microsoft Excel 中分析销售数据。为此,可基于 Customer 和 SalesOrderHeader 表创建视图。然后可以使用 bcp 实用工具导出视图定义的数据。如果使用 INSERT 语句可以在某些视图中插入行,那么使用 bcp 实用工具或 BULK INSERT 语句也可将数据文件中的数据导入视图。 跨服务器组合分区数据 Transact-SQL UNION 集合运算符可在视图内使用,将单独表的两个或多个查询的结果组合到单一的结果集中。这在用户看来是一个单独的表,称为分区视图。例如,如果一个表包含华盛顿的销售数据,另一个表包含加利福尼亚的销售数据,则可以对这两个表使用 UNION 创建一个视图。该视图代表这两个地区的销售数据
四、视图解析 SQL Server 2005 查询处理器对索引视图和非索引视图将区别对待: 索引视图的行以表的格式存储在数据库中[只有创建了索引才分配存储空间]。如果查询优化器决定使用查询计划的索引视图,则索引视图将按照基表的处理方式进行处理。 只有非索引视图的定义才存储,而不存储视图的行。查询优化器将视图定义中的逻辑纳入执行计划,而该执行计划是它为引用非索引视图的 SQL 语句生成的。 SQL Server 查询优化器用于决定何时使用索引视图的逻辑与用于决定何时对表使用索引的逻辑相似。如果索引视图中的数据包括所有或部分 SQL 语句,而且查询优化器确定视图的某个索引是低成本的访问路径,则不论查询中是否引用了该视图的名称,查询优化器都将选择此索引。 当 SQL 语句引用非索引视图时,分析器和查询优化器将分析 SQL 语句的源和视图的源,然后将它们解析为单个执行计划。没有单独用于 SQL 语句或视图的计划。 与所有索引相同,仅当查询优化器确定在 SQL Server 的查询计划中使用索引视图有益时,SQL Server 才会选择使用视图索引。当满足下列条件时,SQL Server 查询优化器使用索引视图: 当满足下列条件时,SQL Server 查询优化器使用索引视图: 下列会话选项均设置为 ON: ANSI_NULLS ANSI_PADDING ANSI_WARNINGS ARITHABORT CONCAT_NULL_YIELDS_NULL QUOTED_IDENTIFIER NUMERIC_ROUNDABORT 会话选项设置为 OFF。 查询优化器查找视图索引列与查询中的元素之间的匹配,例如: WHERE 子句中的搜索条件谓词 联接操作 聚合函数 GROUP BY 子句 表引用 估计的索引使用成本是查询优化器考虑使用的所有访问机制中的最低成本。 查询中引用(直接或通过展开视图访问其基础表)的且与索引视图中的表引用相对应的每个表在该查询中都必须具有应用于表的相同提示集 我们不必SELECT的子句中显式引用索引视图,查询优化器即可使用该索引视图。
五、设计和实现视图 1、创建标准视图
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE VIEW [dbo].[Product_Name] as select ID,Name,CateID from Product where CateID=0 GO SET ANSI_NULLS OFF GO SET QUOTED_IDENTIFIER OFF GO
创建视图的注意事项: (1)除非使用TOP N选项否则不能使用ORDER BY语句; (2)不能使用INTO语句; (3)不能使用临时表的列。 2、设计索引视图的几大要点。 尽量在很少更新(增删改)基础数据表上建立索引视图。 涉及大量聚合或联接的查询 数据量小查询较多的数据表 3、创建索引视图
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO --创建索引视图 CREATE VIEW [dbo].[Product_Name] with SCHEMABINDING as select ID,Name,CateID from [dbo].Product where CateID=3 GO SET ANSI_NULLS OFF GO SET QUOTED_IDENTIFIER OFF GO GO --创建聚集索引 SET ARITHABORT ON GO SET CONCAT_NULL_YIELDS_NULL ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO SET ANSI_PADDING ON GO SET ANSI_WARNINGS ON GO SET NUMERIC_ROUNDABORT OFF GO /**//****** 对象: Index [Product_ViewIndex_ID] 脚本日期: 09/04/2007 23:25:33 ******/ CREATE UNIQUE CLUSTERED INDEX [Product_ViewIndex_ID] ON [dbo].[Product_Name] ( [ID] ASC )WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY] GO --创建非聚集索引 CREATE NONCLUSTERED INDEX [Product_ViewIndex_Name] ON [dbo].[Product_Name] ( [Name] ASC )
创建索引视图的注意事项: 当执行 CREATE VIEW 语句时,ANSI_NULLS 和 QUOTED_IDENTIFIER 选项必须设置为 ON。 要执行所有 CREATE TABLE 语句以创建视图引用的表,ANSI_NULLS 选项必须设置为 ON。 视图不能引用任何其他视图,只能引用基表。 视图引用的所有基表必须与视图位于同一数据库中,并且所有者也与视图相同。 必须使用 SCHEMABINDING 选项创建视图。架构绑定将视图绑定到基础基表的架构。 必须已使用 SCHEMABINDING 选项创建了视图引用的用户定义函数。 表和用户定义函数必须由视图中由两部分组成的名称引用。不允许由一部分、三部分和四部分组成的名称引用它们。 视图中的表达式引用的所有函数必须是确定的。 如果视图定义使用聚合函数,SELECT 列表还必须包括 COUNT_BIG (*)。 用户定义函数的数据访问属性必须为 NO SQL,外部访问属性必须是 NO 公共语言运行时 (CLR) 功能可以出现在视图的选择列表中,但不能作为聚集索引键定义的一部分。CLR 函数不能出现在视图的 WHERE 子句中或视图中的 JOIN 运算的 ON 子句中。 视图中的 SELECT 语句不能包含下列 Transact-SQL 语法元素: 指定列的 * 或 table_name.* 语法。必须明确给出列名。 不能在多个视图列中指定用作简单表达式的表列名。如果对列的所有(或除了一个引用之外的所有)引用是复杂表达式的一部分或是函数的一个参数,则可以多次引用该列。 派生表。 公用表表达式 (CTE)。 行集函数 UNION、EXCEPT 或 INTERSECT 运算符 子查询 外联接或自联接 TOP 子句 ORDER BY 子句 DISTINCT 关键字 COUNT(*)(允许 COUNT_BIG(*)。) AVG、MAX、MIN、STDEV、STDEVP、VAR 或 VARP 聚合函数。 引用可为空表达式的 SUM 函数。 包括排名或聚合窗口函数的 OVER 子句。 CLR 用户定义聚合函数。 全文谓词 CONTAINS 或 FREETEXT。 COMPUTE 或 COMPUTE BY 子句。 CROSS APPLY 或 OUTER APPLY 运算符。 PIVOT 或 UNPIVOT 运算符。 表提示(仅应用于 90 或更高的兼容级别)。 联接提示。 对 Xquery 表达式的直接引用 指定 GROUP BY 后,视图 SELECT 列表必须包含 COUNT_BIG(*) 表达式,并且视图定义不能指定 HAVING、CUBE 或 ROLLUP。 4、创建分区视图。 分区视图在一台或多台服务器间水平连接一组成员表中的分区数据,使数据看起来就像来自一个表。 --建立链接服务器
exec sp_addlinkedserver @srvproduct=N'',@server='LocalServer',@provider='MSDASQL',@provstr='driver={SQL SERVER};server=192.168.1.253;uid=sa;pwd=123' --建立链接服务器登录映射 exec sp_addlinkedsrvlogin @rmtsrvname='LocalServer',@useself='false',@locallogin='sa',@rmtuser='sa',@rmtpassword='123' go --创建分区查询 Create View DistributVIew as select * from [LocalServer].TEST.dbo.[A] union all select * from A
六、视图使用示例
1、使用视图 select * from Product_Name 2、通过视图修改数据 update Product_Name set CateID=5 where ID=60 3、通过视图删除数据 delete from Product_Name where ID=61
sql视图学习笔记--视图的更多相关文章
- 【SQL Server学习笔记】Delete 语句、Output 子句、Merge语句
原文:[SQL Server学习笔记]Delete 语句.Output 子句.Merge语句 DELETE语句 --建表 select * into distribution from sys.obj ...
- 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(六)Picker View视图 学习笔记
想对PickerView进行操作,只能在代码中操作. 下面 ,再添加三个label组件,然后将所有组件配置到代码中(看代码),然后要实现对PickerView的操作,就要实现它的DataSource协 ...
- Asp.net MVC4高级编程学习笔记-视图学习第一课20171009
首先解释下:本文只是对Asp.net MVC4高级编程这本书学习记录的学习笔记,书本内容感觉挺简单的,但学习容易忘记,因此在边看的同时边作下了笔记,可能其它朋友看的话没有情境和逻辑顺序还请谅解! 一. ...
- Asp.net MVC4高级编程学习笔记-视图学习第三课Razor页面布局20171010
Razor页面布局 1) 在布局模板页中使用@RenderBody标记来渲染主要内容.比如很多web页面说头部和尾部相同,中间内容部分使用@RenderBody来显示不同的页面内容. 2) 在布局 ...
- SQL基础学习_04_视图
视图 1. 视图的创建 视图就是保存好的SELECT语句,这些SELECT语句执行之后会产生新的表,所以在SQL中,视图和表是不做差别对待的,也就是SQL也可以对视图做一些操作: 由于 ...
- Mysql学习笔记—视图
1.什么是视图 视图(View)是一种虚拟存在的表.其内容与真实的表相似,包含一系列带有名称的列和行数据.但是视图并不在数据库中以存储的数据的形式存在.行和列的数据来自定义视图时查询所引用的基本表,并 ...
- (五)Oracle学习笔记—— 视图
1. 视图简介 视图是虚表,没有具体物理数据,是通过实体表的一种计算映射逻辑.主要就是为了方便和数据安全. 2. 视图作用 简化数据操作:视图可以简化用户处理数据的方式. 着重于特定数据:不必要的数据 ...
- 郝斌–SQL Server2005学习笔记
数据库(Database)狭义上是指存储数据的仓库,广义上包含对数据进行存储和管理的软件(DBMS)和数据本身.数据库由表.关系和操作组成. 一.数据库简介 1.为什么需要数据库 数据库简化了对数据的 ...
- SQL server2005学习笔记(一)数据库的基本知识、基本操作(分离、脱机、收缩、备份、还原、附加)和基本语法
在软件测试中,数据库是必备知识,假期闲里偷忙,整理了一点学习笔记,共同探讨. 阅读目录 基本知识 数据库发展史 数据库名词 SQL组成 基本操作 登录数据库操作 数据库远程连接操作 数据库分离操作 数 ...
随机推荐
- Linux命令(6):mv命令
1.作用: 为文件或目录改名或将文件由一个目录移入另一个目录中 2.格式: mv [选项] 源文件或目录 目标文件或目录 3.常见参数: 4.使用实例: [root@localhost ~]# mv ...
- SQL Server 查询分析器提供的所有键盘快捷方式(转)
下表列出 SQL Server 查询分析器提供的所有键盘快捷方式. 活动 快捷方式 书签:清除所有书签. CTRL-SHIFT-F2 书签:插入或删除书签(切换). CTRL+F2 书签:移动到下一个 ...
- C# 线程--第二线程方法
概述 上一章节中和大家分享了线程的基础使用方法.在这一章中来和大家分享线程的一些常用方法. 主要包括:线程阻塞,线程终止,线程锁三方面. Thread 的 Sleep 和 Join 方法 Thread ...
- css3学习笔记之图片
圆角图片 border-radius: 圆角图片: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <!DOCTYPE html> <htm ...
- 4月10日学习笔记——jQuery选择器
概念 jQuery 是一套Javascript脚本库,注意 jQuery 是脚本库,而不是脚本框架."库"不等于"框架".jQuery 并不能帮助我们解决脚本的 ...
- oracle手动启动服务
开始-控制面板->管理工具->服务->右键属性 oracle服务设定都是手动启动的,开机时只需要启动3个服务就好了: OracleOraDb11g_home1ClrAgent Ora ...
- ASP.NET的错误处理机制
对于一个Web应用程序来说,出错是在所难免的,因此我们应该未雨绸缪,为可能出现的错误提供恰当的处理.事实上,良好的错误处理机制正是衡量Web应用程序好坏的一个重要标准.试想一下,当用户不小心在浏览器输 ...
- [转]PHP5.5安装PHPRedis扩展
phpredis是个人觉得最好的一个php-redis客户端,因为其提供的function与redis的命令基本一致,降低的了学习成本,同时功能也很全面. 一.linux安装方法 phpredis下载 ...
- 使用WebJar管理css、JavaScript文件
Web前端使用了越来越多的JS或CSS,如jQuery, Backbone.js 和Bootstrap.一般情况下,我们是将这些Web资源拷贝到Java的目录下,通过手工进行管理,这种通方式容易导致文 ...
- 在Windows下设置环境变量 运行mysql程序变得更容易
在Windows下设置环境变量,点开始菜单,右键单击我的电脑--属性--高级--环境变量 可以看到PATH的变量是这样的: C:\WINDOWS;C:\WINDOWS\COMMAND 为了让运行m ...