单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,5.1,视图基本概念,5.1.1,视图基本概念,视图是从一个或多个表或视图中导出的表,其结构合数据是建立在对表的查询基础上的和表。和表一样,视图也是包括几个被定义的数据列和多个数据行,但就本质而言,这些数据列和数据行来源于其所引用的表。所以视图不是真实存在的基础表而是一张虚拟的表,与表不同的是,视图本身并不存储视图中的数据,而是存储在视图所引用的表中。,第,5,章 实现,SQL Server,数据库中的视图,5.1 视图基本概念第5章 实现SQL Server数据库,学生成绩信息的视图,第,5,章 实现,SQL Server,数据库中的视图,基表,1,“,学生信息,”,基表,2,“,学生成绩,”,学生成绩信息的视图 第5章 实现SQL Server数据库,查询语句执行结果,第,5,章 实现,SQL Server,数据库中的视图,查询语句执行结果 第5章 实现SQL Server数据库中,【,实例,5.1】,在查询分析器下建立,“,学生视图,”,的视图。,操作步骤:,第,5,章 实现,SQL Server,数据库中的视图,【实例5.1】在查询分析器下建立“学生视图”的视图。第5章,5.1,2,视图的优缺点,通过本章的实例,可见建立视图可以简化查询,此外,通过视图还可以实现隐蔽数据库 复杂性、为用户集中提取数据、简化数据库用户管理等优点。,1.,隐蔽数据库的复杂性,2.,为用户集中提取数据,3.,简化用户权限的管理,4.,方便数据的交换,第,5,章 实现,SQL Server,数据库中的视图,5.12 视图的优缺点第5章 实现SQL Server数,5.2,创建视图,视图的命名必须遵循标志符规则,必须对每个用户都是惟一的。视图名称不能和创建该视图的用户的其他任何一个表的名称相同。,在默认状态下,视图中的列名继承了它们基表中的相应列名,对于下列情况则需要重新 指定列的别名。,(1),视图中的某些列来自表达式、函数或常量时。,(2),当视图所引用不同基表的列中有相同列名时。,(3),希望给视图中的列指定新的列名时。,(4),视图的定义可以加密,以保证其定义不会被任何人,(,包括视图的拥有者,),获得。,第,5,章 实现,SQL Server,数据库中的视图,5.2创建视图第5章 实现SQL Server数据库中的,5.2,1,使用企业管理器创建视图,【5.2】,在企业管理器中创建,“,学生成绩信息,”,视图,该视图中从基表,1,学生信息和基表,2,学生成绩中选择所有学号、姓名、课程号、期中成绩和期末成绩。,操作步骤:,第,5,章 实现,SQL Server,数据库中的视图,5.21使用企业管理器创建视图第5章 实现SQL Ser,第,5,章 实现,SQL Server,数据库中的视图,第5章 实现SQL Server数据库中的视图,归纳分析:,在窗口内容由上至下分为四部分:第一部分显示视图的基表及其对应外键关系,(,有关外键的内容在第,8,章,),;,第二部分显示视图中的列,可以在,“,准则,”,处输入每一列对应的条件,如,WHERE,语句,并可以加入排序型,如果需要使用,GROUP,语句对视图数据进行分组,则可以单击列名,在弹出的快捷菜单 中选择,“,分组,”,;第三部分显示创建视图所对应的,T-SQL,语句,可以在这里对查询条件进行 修改:第四部分为视图运行结果窗口,视图建立完毕后,在图,5.8,所示窗口内右击并在弹出 的快捷菜单中选择,“,运行,”,(,或直接单击,“,运行,”,按钮,),,可以在此查看视图的数据内容。,使用多个基表,建立视图,最好建立关联后再用,否则会使视图的数据重复。,第,5,章 实现,SQL Server,数据库中的视图,归纳分析:第5章 实现SQL Server数据库中的视图,5.2,2,使用,T-SQL,语句创建视图,【,实例,5.3】,在查询分析器下建立,“,课程查询视图,”,,该视图中包含所有学号、课程号、课程名称的任课教师及他们平时成绩。,根据题的要求,该视图要对表,“,学生信息,”,、,“,课程,”,和,“,学生成绩,”,以主外键进行自然连接,并对视图文本加密,使用户看不到定义的文本。,操作步骤:,第,5,章 实现,SQL Server,数据库中的视图,5.22 使用T-SQL语句创建视图第5章 实现SQL,归纳分析:,命令格式:,CREATE VIEW,视图名,(,视图列名,1,,视图列名,2,,,,视图列名,n),WITH ENCRYPTION,AS,SELECT,语句,WITH CHECK OPTION,其中,WITH ENCRYPTION,子句对视图进行加密,,WITH CHECK OPTION,表示对视图进行,UPDATE,、,INSERT,和,DELETE,操作时,要保证所操作的行,满足视图定义中的条件,即只有满足视图定义条件的操作才能执行。,第,5,章 实现,SQL Server,数据库中的视图,归纳分析:第5章 实现SQL Server数据库中的视图,SELECT,语句可以是任何复杂的查询语句,但通常不允许包含,ORDER BY,子句和,DISTINCT,短语。,如果,CREATE VIEW,语句没有指定视图列名,则该视图的列名默认为,SELECT,语句目标列中各字段的列名。,第,5,章 实现,SQL Server,数据库中的视图,SELECT语句可以是任何复杂的查询语句,但通常不允,5.3,管理视图,在企业管理器下或通过,SQL,语句都可以查看视图的定义信息,但是,如果在视图的定义语句中带有,WITH ENCRYPTION,子句,表示,SQL Server,对建立视图的语句文本进行了加密,则无法看到视图的定义语句。即使是视图的拥有者和系统管理员也不能看到。,第,5,章 实现,SQL Server,数据库中的视图,5.3管理视图第5章 实现SQL Server数据库中的,5.3,1,查看视图信息,1,使用企业管理器查看,【,实例,5.4】,查看,例,5.1,创建的,“,学生成绩信息,”,视图,为例说明其操作过程。,操作步骤:,第,5,章 实现,SQL Server,数据库中的视图,5.31 查看视图信息第5章 实现SQL Server,2.,使用系统存储过程查看视图信息,【,实例,5.5】,查看视图学生成绩信息的名称、列名、拥有者、创建时间等信息,查看视图的关联性,查看定义视图的,T-SQL,语句。,操作步骤:,第,5,章 实现,SQL Server,数据库中的视图,2.使用系统存储过程查看视图信息第5章 实现SQL Se,归纳分析:,由上例可知使用,T-SQL,创建表需要一定的格式,在这里我们给出使用,Transact-SQL,语言创建表,语法如下:,(1),使用系统存储过程显示视图的名称、列名、拥有者、创建时间、列的属性等信息。,命令格式:,sp help,表,/,视图,(2),使用系统存储过程显示定义视图的,T-SQL,语句。,命令格式:,sp helptext,表,/,视图,(3),显示视图与其他表或视图的关联性信息,(,见第,10,章数据完整性,),。,sp depends,表,/,视图,第,5,章 实现,SQL Server,数据库中的视图,归纳分析:第5章 实现SQL Server数据库中的视图,5.3,2,修改视图,1.,使用企业管理器修改视图,【,实例,5.6】,使用企业管理器修改视图,“,学生成绩信息,”,中将期中成绩删除。,操作步骤:,第,5,章 实现,SQL Server,数据库中的视图,5.32 修改视图第5章 实现SQL Server数据库,归纳分析:,在设计视图窗口,可以添加或删除视图的基表及其列,修改视图属性。例如,右击一个表的名称,在弹出的菜单中选择,“,删除,”,,则会从视图的定义中除去该表。其他操作与建立视图的方法类似,这里不再赘述。,也可以在图,5.12,所示窗口的快捷菜单中选择,“,属性,”,命令,在弹出的,“,查看属性,”,窗口中直接修改创建视图的,T-SQL,语句。,第,5,章 实现,SQL Server,数据库中的视图,归纳分析:第5章 实现SQL Server数据库中的视图,2.,使用,T-SQIL,语句修改视图,【,实例,5.7】,在查询分析器中,建立一个,“,查询,”,的视图,然后对视图名,“,查询,”,更改为,“,课程视图,”,并增加一个平时成绩的列。,操作步骤:,第,5,章 实现,SQL Server,数据库中的视图,2.使用T-SQIL语句修改视图第5章 实现SQL Se,归纳分析:,注意,,只有数据库的所有者或视图的所有者能够对视图进行重命名工作。修改视图名称与修改表名称所用方法相同,。,命令格式:,sp_rename,原视图名,新视图名,修改一个已经创建视图的定义可以使用,T-SQL,语句。,命令格式:,ALTER VIEW,视图名,WITH ENCRYPTION,AS,SELECT,语句,WITH CHECK OPTION,第,5,章 实现,SQL Server,数据库中的视图,归纳分析:第5章 实现SQL Server数据库中的视图,5.3,3,删除视图,当不再需要某个已经存在的视图时,可以删除它。删除视图后,表和视图所基于的数据并不受影响。,1,使用企业管理器删除视图,【,实例,5.8,】,删除没有的视图如删除,“,课程查询视图,1,”,。,操作步骤:,在企业管理器中选中,“,课程查询视图,1,”,右击,在弹出的快捷菜单中选择,“,删除,”,命令,即可删除选中的视图。,第,5,章 实现,SQL Server,数据库中的视图,5.33 删除视图第5章 实现SQL Server数据库,2,使用,T-SQL,语言删除视图,【,实例,5.9,】,删除没有的视图如删除,“,课程查询视图,2,”,、,“,课程查询视图,a,”,。,操作步骤:,(,1,)启动,“,查询分析器,”,,输入如下,SQL,语句:,DROP VIEW,课程查询视图,2,课程查询视图,a,GO,(,2,)按,“,F5,”,键或单击工具栏,“,执行查询,”,图标执行。,归纳分析:,由上例可知使用,T-SQL,删除视图。,命令格式:,DROP,VIEW,视图名,,视图名,,,视图名,n,使用该语句一次可以删除多个视图。,第,5,章 实现,SQL Server,数据库中的视图,2使用T-SQL语言删除视图第5章 实现SQL Serv,5.,4,通过视图访问数据,对视图进行修改操作包括插入、修改和删除类操作。由于视图是不存储数据的虚表,所以对视图数据的修改、最终转换为对基表数据的修改。,5.4,1,通过视图添加表中的数据,【,实例,5.10,】,在视图学生成绩信息中插入数据学号,=1013,,姓名,=,王东,课程号,=202,,期中成绩,=89,,期末成绩,=87,。然后分别查询表学生习信息、学生成绩和视图学生成绩信息,看看有什么结果。,操作步骤:,第,5,章 实现,SQL Server,数据库中的视图,5.4 通过视图访问数据第5章 实现SQL Server,注意:,学号和姓名的数据取自基表学生信息,课程号,期中成绩,期末成绩的数据取自基表学生成绩。,由于没有违反基表中的约束条件,所以数据全部成功地插入到各个基表中。但是,查询视图学生成绩信息将看不到这些数据,因为数据只是通过视图分别孤立地插入到表 学生信息和学生成绩中,而插入的数据并不符,合建立视图的条件。,第,5,章 实现,SQL Server,数据库中的视图,注意:学号和姓名的数据取自基表学生信息,课程号,期中成绩,期,归纳分析:,在视图中添加数据,就是对视图的基表添加数据,添加数据也使用,INSERT,命令。用法与向表中添加数据相同。但要,注意:,(1),当视图有多个基表时,不能在一个语句中对视图中的多个基表同时进行修改,亦即一次只能对视图的一个基表内的数据进行增、删、改操作。,(2),由于视图中