SQL应用与开发:(四)视图的应用

视图是根据预定义的查询建立起来的一个表,它的定义以模式对象的方式存在。同基表一样,视图包含一系列带有名称的列和行数据,但是与持久基表不同的是,在视图中没有存储任何数据。行和列的数据来自由定义视图的查询所引用的基表,并且在应用视图时动态生成。而正是由于视图所对应的数据并不实际地以视图结构存储在数据库中,而是存储在视图所引用的表中,所以说视图是一个虚拟表。

对其中多引用的基表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其他数据库的一个或多个表,或者其他视图。也就是说,视图是数据库中某些表或其他视图中数据的特定子集。一旦定义了一个视图,就可以像使用基本表一样使用它。

1.了解视图

视图结合了基表和查询两者的特性:用户可以从一个或者多个相关的基表中提取一个数据集(查询特性);用户能运用视图去更新视图中的信息,并且永久地存储结果到磁盘(表特性)。

视图也可用作安全机制,方法是允许用户通过视图访问数据,而不授予用户直接访问基表的权限。

视图的优点主要表现在一下几点:

数据集中显示:视图使用户着重于他们感兴趣的某些特定数据和他们所负责的特定任务,可以提高数据操作效率。

简化对数据的操作:视图可以大大简化用户对数据的操作。可以经常使用连接、投影、联合查询或选择查询定义视图,这样在每次执行相同的查询时,不必重新写这些复杂的查询语句,只要一条简单的查询视图语句即可。可见视图向用户隐藏了表与表之间的复杂的连接操作。

自定义数据:视图能够让不同的用户以不同的方式看待不同或相同的数据集。即是不同水平的用户共同用一数据库时也是如此。

导出和导入数据:可以使用视图将数据导出至其他应用程序。

合并分割数据:在某些情况下,由于表中数据量太大,在表的设计过程中可能需要经常将表进行水平分割或垂直分割,然而这样表的结构的变化会对应用程序产生不良的影响。使用视图就可以重新保持原有的结构关系,从而使外模式保持不变,原有的应用程序仍可以通过视图来重载数据。

安全机制:视图可以作为一种安全机制。通过视图用户只能查看和修改他们所能看到的数据。其他数据库或表既不可见也不可以访问。如果某一用户想要访问视图的结果集,必须授予其访问权限。视图所引用表的访问权限与视图权限的设置互不影响。

2.视图操作


2.1“增”操作

创建可更新视图的基本语句:

CREATE VIEW <view_name> [(<view_column_name>)]

AS <query_expression>

[WITH CHECK OPTION]

其中,占位符<view_name>表示所创建的视图的名称,占位符<view_column_name>表示视图提供的列名,占位符<WITH CHECK OPYION >表示通过视图修改行时,确认提交修改后,仍可通过视图看到修改的数据。

例如,在数据库“销售管理系统”中创建一个名为“客户_VIEW”的视图,该视图包含列“业务员编号”和“接待顾客人数”,其执行语句如下:

CREATE VIEW 客户_VIEW(业务员编号,接待顾客人数)

AS

SELECT 所属业务员编号,COUNT(客户姓名)

FROM 客户信息

GROUP BY 所属业务员编号

执行上述语句后,会在相应的数据库中创建一个名为“客户_VIEW”的视图,从该视图中可以查询每个业务员所接待的客户数。

如果创建一个视图该视图没有汇总或聚集数据,每一列都与一个基表中的一个源列相对应,并且每一行都与一个基表中的一个源行对应,则这个视图便是一个可更新的视图。例如,在数据库“销售管理系统”中,创建一个名为“业务员_VIEW”的视图,该视图中的列来自基表“业务员信息”中的列“业务员姓名”、“家庭住址”、“电话”。

CREATE VIEW 业务员_VIEW

AS 

SELECT 业务员编号,业务员姓名,家庭住址,电话

FROM 业务员信息

在创建视图的语句中,WITH CHECK OPTION 子句使用与在SELECT语句中包含WHERE子句的可更新视图。例如,将上述视图“业务员_VIEW”改为姓王的业务员信息。

CREATE VIEW 业务员_VIEW

AS 

SELECT 业务员编号,业务员姓名,家庭住址,电话

FROM 业务员信息

WHERE 业务员姓名 LIKE '王%'

这样如果在视图“业务员_VIEW”中只包含姓王的业务员信息。如果在视图中添加一个业务员信息,但是该业务员不姓王,那么更新这个视图将会不一样。由于这个视图是可更新的,所以允许上述设置。但是,如果紧接着再调用这个视图,那么用户将不能够看到刚被更新的行,也无法对其进一步地更新。

但是如果在创建视图定义的末尾添加 WITH CHECK OPTION 子句,如下语句:

CREATE VIEW 业务员_VIEW

AS 

SELECT 业务员编号,业务员姓名,家庭住址,电话

FROM 业务员信息 

WHERE 业务员姓名LIKE '王%' WITH CHECK OPTION 

这时如果再次向视图中添加一个不姓王的业务员信息,系统将会弹出一个出错消息,告诉用户不能这样修改。所以,使用WITH CHECK OPTION 子句可以保证用户所执行的更新不会阻止他们有效地使用创建的更新。

实战演练

1.使用CREATE VIEW 语句创建视图:

CREATE VIEW 入库单_VIEW(入库单编号,入库数量,入库金额)

AS

SELECT 入库单编号,入库数量,入库商品金额

FROM 入库单明细信息

WHERE 入库商品金额>10000

 利用SELECT 语句对该视图进行查看:

SELECT *

FROM 入库单_VIEW

根据上述代码的解释,大家应该可以看懂,其所表述的意思,不再累述。

2.下面举一个基于计算的创建视图:

在数据库“销售管理系统”中,创建一个名为“商品信息_VIEW1”的视图,该视图的列基表“商品信息”,并且在视图中返回“单价”打八折后的商品信息。

CREATE VIEW 商品信息_VIEW1(商品名称,供应商编号,价格)

AS

SELECT 商品名称,供应商编号,单价*0.8

FROM 商品信息

2.2“删”操作

当不需要一个视图时可把他删除掉,用DROP VIEW从当前数据库中删除视图,删除视图的基本语法结构为:

DROP VIEW <view_name>

执行DROP VIEW语句后,视图定义将被删除,但是它对存储在基表中的数据没有任何影响,这与删除表不一样。在删除视图后,既可以重建这个视图,也可以创建使用同一名称的不同视图。

例如,删除数据库“销售管理系统”中的视图“商品信息_VIEW”,用下述语句实现:

DROP VIEW 商品信息_VIEW

删除一个视图后,虽然对于它所基于的表和数据来说,不会受到任何影响,但是对于依赖于改视图的其他对象或查询来说,将会执行时出现错误。

2.3“改”操作

如果基表发生了变化,或者要通过视图查询更多的信息,都需要修改视图的定义。要改变一个已经创建的视图的定义,应该使用ALTER VIEW语句,其基本的语法格式:

ALTER VIEW <view_name>[(view_column_name)]

AS<query_expression>

[WITH CHECK OPTION]

其中各参数与CREATE VIEW语句中相同。

例如,在数据库“珠宝营销系统”中,基于“珠宝信息”表创建了一个名为“珠宝信息_VIEW”的视图,该视图中包含列“珠宝商编号”、“珠宝名称”和“珠宝单价”,并且该视图只接受“珠宝售价”大于450的信息。通过下属CREATE VIEW语句创建视图:

CREATE VIEW 珠宝信息_VIEW

AS

SELECT 珠宝商编号,珠宝名称,珠宝售价

FROM 珠宝信息

WHERE 珠宝售价>450

执行上述语句创建视图后,通过下属SELECT语句来查看视图中的信息:

SELECT *

FROM 珠宝信息_VIEW

执行后,便得到了我们珠宝售价大于450的珠宝相关信息。

然后对视图“珠宝信息_VIEW”的定义进行修改。将视图中返回的行限定为“珠宝售价”大于550的信息。则用下述的语句进行修改该视图的定义:

ALTER VIEW 珠宝信息_VIEW

AS

SELECT 珠宝商编号,珠宝商名称,珠宝售价

FROM 珠宝信息

WHERE 珠宝售价>550

成功执行上述语句后,使用SELECT语句查看修改后的视图中信息:

SELECT *

FROM 珠宝信息_VIEW

执行后,便得到了我们珠宝售价大于550的珠宝相关信息。

3.通过视图修改数据

在视图中对其中的数据进行修改,实际上就是对基表中的数据进行修改。这是由视图本身的性质决定的,因为视图是一个虚拟表, 它并不存在数据,数据只是存在于基表中。

如果创建视图时,在CREATE VIEW语句中,有下列内容,则该视图中的数据时不可修改的:

SELECT列表中含有DISTINCT;

SELECT列表中含有表达式,诸如计算列、函数等;

在FROM子句中引用多个表;

引用不可更新的视图;

GROUP BY或HAVING子句。

通过视图修改是通过INSERT、UPDATE和DELECT子句来完成的。

3.1 INSERT语句的使用

举例来说,在数据库”销售管理系统“中,基于”供应商信息“表创建一个名为”供应商_VIEW“的视图,该视图中包含列”供应商编号“、”供应商名称“、”联系人姓名“和”联系电话“。

CREATE VIEW 供应商信息-VIEW

AS

SELECT 供应商编号,供应商名称,联系人姓名,联系电话

FROM 供应商信息

成功运行上述语句后,打开视图”供应商_VIEW“,可以对其中的信息进行查看。如果要在视图中添加一行数据,则用INSERT 语句实现:

INSERT INTO 供应商信息_VIEW

VALUES(1010,'黄河科技','吴奎','13202204586')

然后利用下述SELECT语句对插入的数据行后的视图查询:

SELECT *

FROM 供应商信息_VIEW

查询结果,便是我们在视图的最后添加了一行数据,并且打开相应的基表,在基表的最后一行也添加了上述数据。

3.2 UPDATE语句的使用

更新视图中数据和更新基表中的数据的方式一样,但是当视图是基于多个基表的数据时,每次更新操作只能是更新来自一个基表中的数据列的值。

例如,将前面创建的视图”操作人员信息_VIEW“中,添加的姓名为”张蓉蓉“的操作人员的”联系电话“改为 13933456770:

UPDATE 操作人员信息_VIEW

SET 联系电话='13933456770'

WHERE 操作人员姓名='张蓉蓉'

打开视图”操作人员信息_VIEW“,对其中的数据进行查看,发现最后一行中的列”联系电话“中的数据变为13933456770。

3.3 DELETE语句的使用

通过视图删除数据的方法与通过基表删除数据的方法一样,最终还是体现为从基表中删除数据。当一个视图基于两个或者两个以上的基表时,不允许删除视图中的数据。

例如,删除上述”供应商信息_VIEW“视图中天剑的那一行数据。

DELETE FROM 供应商信息_VIEW 

WHERE 供应商编号=1010

执行上述语句后,打开视图”供应商信息_VIEW“,则在最前面添加”供应商编号“为1010的一行数据被删除;同样,在基表中的着一行数据也被删除了。

4.学习小结

视图,无论是对于用户还是对于操作人员来说都是一个很重要的工具,简单来说,就是一个虚拟的表,而这个表是你想要的结果,从基表中查询出来的结果,就展现在这个虚拟表中,满足应用的情况下,随时更改你想要的结果,简单而实用。

通过本章节的学习,感觉数据库的知识,实用性很强,努力去实战一下,把知识融会一下。接下来的博客,依旧是关于数据库的相关知识的总结,期待吧!

时间: 2024-10-12 22:30:51

SQL应用与开发:(四)视图的应用的相关文章

SQL Server:创建索引视图

server|创建|视图|索引 视图也称为虚拟表,这是因为由视图返回的结果集其一般格式与由列和行组成的表相似,并且,在 SQL 语句中引用视图的方式也与引用表的方式相同.标准视图的结果集不是永久地存储在数据库中.查询每次引用视图时,Microsoft SQL Server 2000 会动态地将生成视图结果集所需的逻辑合并到从基表数据生成完整查询结果集所需的逻辑中.生成视图结果的过程称为视图具体化.有关更多信息,请参见视图解析. 对于标准视图而言,为每个引用视图的查询动态生成结果集的开销很大,特别

10大特点分析SQL Server 2005开发

本文从数据库开发的方面讲述了SQL Server2005的10个最重要的特点-- NET框架主机 使用SQL Server2005,开发人员通过使用相似的语言,例如微软的VisualC#.NET和微软的VisualBasic,将能够创立数据库对象.开发人员还将能够建立两个新的对象--用户定义的类和集合. XML技术 在使用本地网络和互联网的情况下,在不同应用软件之间散步数据的时候,可扩展标记语言(XML)是一个重要的标准.SQL Server2005将会自身支持存储和查询可扩展标记语言文件. A

SQL Server 优化---为什么索引视图(物化视图)需要with(noexpand)强制查询提示

原文:SQL Server 优化---为什么索引视图(物化视图)需要with(noexpand)强制查询提示   本文出处:http://www.cnblogs.com/wy123/p/6694933.html    第一次通过索引视图优化SQL语句,以及遇到的一些问题,记录一下.   语句分析 最近开发递交过来一个查询统计的SQL,说是性能有问题,原本执行需要4-5秒钟,这个业务本身对性能要求又比较critical,期望是在1s之内在用尽各种办法之后(执行计划,统计信息,索引,改写SQL,临时

iOS开发系列--视图切换

概述 在iOS开发中视图的切换是很频繁的,独立的视图应用在实际开发过程中并不常见,除非你的应用足够简单.在iOS开发中常用的视图切换有三种,今天我们将一一介绍: UITabBarController UINavigationController 模态窗口 UITabBarController iOS三种视图切换的原理各不相同: UITabBarController:以平行的方式管理视图,各个视图之间往往关系并不大,每个加入到UITabBarController的视图都会进行初始化即使当前不显示在

升级SQL Server 2014的四个要点要注意_MsSql

升级并不容易,但是有一些特性值得花时间了解.下面本文将介绍一些避免升级问题的技巧. 升级一个关键业务SQL Server实例并不容易;它要求有周全的计划.计划不全会增加遇到升级问题的可能性,从而影响或延迟SQL Server 2014的升级.在规划SQLServer 2014升级时,有一些注意事项有助于避免遇到升级问题. 注意:升级SQL Server 2014的四个要点! 选择升级策略 在SQL Server升级中考虑采用内部或是并行迁移策略.我首选并行迁移策略,因为它风险较低,即便难度更大一

升级SQL Server 2014的四个要点要注意

升级并不容易,但是有一些特性值得花时间了解.下面本文将介绍一些避免升级问题的技巧. 升级一个关键业务SQL Server实例并不容易;它要求有周全的计划.计划不全会增加遇到升级问题的可能性,从而影响或延迟SQL Server 2014的升级.在规划SQLServer 2014升级时,有一些注意事项有助于避免遇到升级问题. 注意:升级SQL Server 2014的四个要点! 选择升级策略 在SQL Server升级中考虑采用内部或是并行迁移策略.我首选并行迁移策略,因为它风险较低,即便难度更大一

【原创:数据库】SQL SERVER数据库开发之存储过程应用

可能有不少朋友使用SQL SERVER做开发也已经有段日子,但还没有或者很少在项目中使用存储过程,或许有些朋友认为根本没有必要使用存储过程等等.其实当你一个项目做完到了维护阶段时,就会发现存储过程给我们带来了好处了,修改方便,不能去改我们的应用程序,只需要改存储过程的内容,而且还可以使我们的程序速度得到提高. QUOTE: SQL SERVER 联机丛书中的定义: 存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合. 可以创建一个过程供永久使用,或在一个会话

SQL SERVER数据库开发之存储过程应用

server|存储过程|数据|数据库   可能有不少朋友使用SQL SERVER做开发也已经有段日子,但还没有或者很少在项目中使用存储过程,或许有些朋友认为根本没有必要使用存储过程等等.其实当你一个项目做完到了维护阶段时,就会发现存储过程给我们带来了好处了,修改方便,不能去改我们的应用程序,只需要改存储过程的内容,而且还可以使我们的程序速度得到提高.   引用: SQL SERVER 联机丛书中的定义: 存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合.

jsp网站开发四“酷”全书:新闻、论坛、电子商城、博客_源码源代码下来谁能运行呀

问题描述 jsp网站开发四"酷"全书:新闻.论坛.电子商城.博客_源码源代码下来谁能运行呀 jsp网站开发四"酷"全书:新闻.论坛.电子商城.博客_源码源代码下下来与偶人能运行的吗?求帮助啊 解决方案 木有服务器运行个毛线,,,jsp得有服务器才能运行啊...兄弟... 解决方案二: 木有服务器运行个毛线,,,jsp得有服务器才能运行啊...兄弟... 解决方案三: 找个开发器,装里面,然后发布- 解决方案四: 有环境只是运行不出页面

sql数据库-SQL servel数据库开发

问题描述 SQL servel数据库开发 go use QQmaster--打开数据库 create table QQuser--创建QQuser表 ( --数据库表中各字段及字段类型 QQID bigint primary key, PassWord varchar check(len(password)>=6) not null, LastLogTime datetime not null, Online int check(online=0 or online=1 or online=2)