1、,中北大学工业工程系,网络数据库技术,第9章 视图,9.1 视图概述,9.2 建立视图,9.3 修改视图,9.5 删除视图,9.6 使用视图,9.4 重命名视图,视图是一个基于选择查询的虚拟表。视图与真实的数据库表有很多类似的地方,例如:视图也是由若干字段(列)和一些记录(行)组成的;也可像表那样作为Select语句的数据来源使用;在满足某些条件的情况下,还可通过视图来插入、更改和删除表的数据。但是,视图并不是以一组数据的形式存储在数据库中的,视图中的字段和记录都是来自数据库表(称为基表),视图本身并不存储数据,视图中的数据是在引用视图时动态生成的。,视图是一种常用的数据库对象,它提供查看和存
2、取数据的另一种途径。使用视图不仅可以简化数据库操作,还可提供数据库的安全性。,9.1 视图概述,为了从“成绩表”、“学生表”、“课程表”中检索记录,需要使用INNER Join运算来连接这三个表,查询语句为:Select a.学号,姓名,课程名称,成绩 FROM 成绩表 AS a INNER Join 学生表 AS b ON a.学号 = b.学号 INNER Join 课程表 AS c ON a.课程编号 = c.课程编号 Where c.课程名称 = 电子商务,1、理解视图视图是在基于一个选择查询所建立起来的数据库对象,在这个选择查询中可以引用一个或多个表。视图建立以后,又可反过来出现在另
3、外一个选择查询中,并作为这个选择查询的数据源来使用。,如要重复使用以上语句,可有以下两种选择:在查询分析器中,将所使用的查询语句保存在磁盘文件中,以供以后再次使用。这种文件称为查询文件,其扩展名为.sql。以后可在查询分析器中打开、修改、执行这个查询文件。这种方法的缺点是:查询文件是作为独立的磁盘文件存放在数据库外部的,不便于管理和维护。,在查询语句的基础上建立视图。这种方法的优点是:视图作为一个数据库对象存储在数据库中的,便于进行管理和维护,而且视图像表一样还可用在查询语句中,从而简化了检索数据的操作。在查询分析器中,可使用Create View语句来建立一个视图。,Create View
4、电子商务成绩视图 AS Select a.学号,姓名,课程名称,成绩 FROM 成绩表 AS a INNER Join 学生表 AS b ON a.学号 = b.学号 INNER Join 课程表 AS c ON a.课程编号 = c.课程编号 Where c.课程名称 =电子商务,建好视图之后,如需检索电子商务课程成绩,并按成绩从高到低排序时,查询语句为:Select * FROM 电子商务成绩视图 ORDER BY 成绩 DESC,2、视图的用途使用视图可以集中、简化和定制用户的数据库显示。视图通常应用两种场合:简化数据操作。如果在查询中数据分散在两个或多个表中,或者所用的搜索条件比较复杂
5、时,需要编写很长的Select语句,并且要多次执行此相同的任务,则可考虑建立视图。提高数据库的安全性。使用视图还可定制允许用户查看哪些数据,让用户通过视图来访问表中的特定字段和记录,而不是授予他们直接访问基表的权限。,2、视图的限制首先要具有Create View权限,并要注意9点。遵循标识符命名规则,视图名称要惟一。一个视图最多可引用1024个字段,这些字段可来自一(多)个表或视图。在定义视图的查询语句中,不能有ORDER BY、Compute、INTO关键字。视图可在其他视图上建立,最多嵌套32层。即使删除一个视图所依赖的表或视图,这个视图的定义仍保留在数据库中。不能在视图上建立索引、全文
6、索引。不能在视图上绑定规则、默认值和触发器。不能建立临时视图,也不能在一个临时表上建立视图。只能在当前数据库中创建视图。但是,视图所引用的表或视图可以是其他数据库中的,甚至可以是其他服务器上的。,可以使用创建视图向导、企业管理器或Create View语句都可建立视图。,1、使用向导建立视图步骤启动企业管理器,展开一个服务器组,并展开要在其中建立视图的服务器;选择“工具/向导”命令,出现“选择向导”对话框;单击“数据库”左边的加号图标,然后双击“建立视图向导”;在欢迎画面中,单击“下一步”;从“数据库”下拉列表中,选择要在视图中引用的数据库;选择要在视图中引用的一个或多个表,然后单击“下一步”
7、;选择要在视图中显示的一个或多个字段,然后单击“下一步”;输入Where子句,限制在视图中显示的记录,然后单击“下一步”;在View框中为所建视图指定一个名称,然后单击“下一步”;到这里,已经完成了建立视图所需要的各个步骤,并在对话框中列出了建立视图时需要执行的语句;如必要的话,也可在此修改语句。然后单击“完成”按钮。在消息框中,提示视图已经创建成功,单击“确定”,结束建立视图过程。,9.2 建立视图,使用向导建立视图后,可在企业管理器中看到这个视图。其方法:在“树”窗格中单击视图所引用的数据库,然后单击“视图”,此时在内容窗格中可以看到所建立的视图。如右击一个视图,然后从弹出菜单中选择“打开
8、视图/返回所有行”命令,就可通过这个视图来查看表中的数据。,2、使用企业管理器建立视图步骤在“树”窗格中展开服务器,选择一个服务器。展开数据库,然后展开要在其中建立视图的数据库。右击“视图”节点,从弹出菜单中选择“新建视图”命令(此后出现三个窗格:图表窗格、网格窗格、结果窗格)。右击图表窗格,从弹出菜单中选择“添加表”命令。 在“表”或“视图”选项卡中,单击需要添加到新建视图中的表或视图,然后单击“添加”,使之出现在图表窗格中。对要添加到新视图中每个表或视图重复这个步骤以后,单击“关闭”。,在网格窗格中单击“列”单元格,然后从列表中选择要在视图中引用的字段。如果要使一个字段出现在视图的结果集中
9、,请选中“输入”列中的复选框。如果在视图中引用了某个字段,又不想让它出现在视图的结果集中,(如仅仅在过滤条件中使用这个字段),请清除“输入”列中的复选框。如想按某个字段分组,请右击该字段,然后从弹出菜单中选择“分组”命令。设置分组以后,在图表窗格中相应字段的右边会出现一个括号图标。在“准则”列中,输入提取记录时所使用的过滤条件,由此生成一个Where子句。如指定某个字段分组,则生成一个Having子句。在某个字段上设置过滤条件时,在图表窗格中该字段的右边会出现一个漏斗图标。在“或”列中,输入提取记录时所使用的附加过滤条件。,若要设置视图的其他属性,请右击网格窗格,从弹出菜单中选择“属性”命令,
10、并在对话框中设置以下属性:如要用一个星号(*)表示所有字段,选中“输出全部列”复选框;如要在Select语句中添加一个DISTINCT关键字,以滤掉结果集中的重复记录,选中“输出重复行的一行”复选框;如要对视图定义进行加密处理,选中“加密浏览”复选框;若要指定结果集之中返回若干行记录,请在从“顶端”算起框中输入行数;也可以在行数后面输入Percent关键字,以指定在结果集之中返回百分之几的记录。完成上述设置之后,单击“关闭”,返回视图设计画面。如想对视图返回的结果集进行预览,请右击图表窗格,然后从弹出菜单中选择“运行”命令,或在工具栏上单击“运行”按钮,结果显示在结果窗格中。当预览结果合乎需要
11、时,请右击图表窗格,从弹出菜单中选择“保存”命令,或在工具栏上单击保存按钮,并在对话框中为所建立的视图指定一个名称。以上所有操作步骤都是通过可视化方式完成的。,3、使用Create View语句建立视图Create View语句的格式: Create View 视图名 (字段名 , n) With Encryption AS Select 语句 With check option ,例9-1、在数据库JWGL的表student上创建一个视图student_view1,视图的数据包括班级号为“g99402”和“g99403”所有学生的资料。USE jwglGoCreate View studen
12、t_view1AS Select * FROM studentWhere (class_id=g99402 or class_id=g99403)Go,With Encryption表示对存储视图进行加密。 With check option指出对视图进行的修改要符合Select语句所指定的限制条件。,指定字段别名:在Create View语句中,圆括号中的字段名用于指定在视图中使用的字段名称。只有在下列情况下,才有必要在Create View语句中指定字段别名:某个字段是来自一个算术表达式、内置函数或常量;由于在Select语句中连接多个表,致使多个字段具有相同的名称;要给某个字段指定一个不
13、同于基表中的字段名,如在基表中用英文,在视图中用中文。,例9-2、建立一个名为student_view2的视图,用于从jwgl数据库的student表中检索所有男生的学号、姓名、班级、家庭住址、入学时间、出生年月,并用中文作字段名。USE jwglGoCreate View student_view2 (学号 , 姓名 , 班级 , 家庭住址,入学时间, 出生年月) AS select student_id , student_name , class_id , home_addr , entrance_date , birth FROM studentWhere sex = 1 Go,对视图
14、定义进行加密如果不想让用户查看视图定义的文本,则需要对存储在系统表Syscomments中的视图定义进行加密处理,这个任务可通过在Create View语句中使用With Encryption子句来实现。,例9-3、在jwgl数据库中,建立一个名为student_view3的视图,由表course、book及class_course创建的一个显示“g99402”班所开课程的课程名、教材名、出版社及作者,并对视图进行加密处理。USE jwglGoCreate View student_view3 WITH Encryption AS Select course.course_name as 课程
15、名, book.book_name as 书名, book.publish_company as 出版社, book.author as 作者 FROM course, book, class_course Where (course.book_id=book.book_id and class_course.course_id=course.course_id and class_course.class_id=g99402)Go,使用With check option若在建立视图时使用Where子句定义一个选择条件,在使用视图进行插入或更新的过程中却提供了不符合这个条件的数据,那么该记录虽
16、然存储在视图所引用的基表中,但在视图中将无法看到该记录。为了避免发生这种情况,使用With Check Option选项,就会强制通过视图插入或修改时的数据满足Where子句所指定的选择条件。如果在Insert / Update语句提供的数据违反了这个选择条件,则这些语句执行失败,并出现以下错误提示信息。,如果在企业管理器中展开jwgl数据库下面的表,然后在内容窗格中找到系统表Syscomments,右击此表,并从弹出菜单中选择“打开 / 返回所有行”命令,则可看出经过加密与未加密的视图之间的差别:在“Encrypted”列中,加密的视图显示1,未加密的视图显示0;在“Text”列中,加密视图
17、显示乱码,未加密视图显示定义文本。,两种方法修改:一是使用企业管理器;二是使用ALTER VIEW语句。,1、使用企业管理器修改视图在“树”窗格中展开服务器,选择一个服务器。展开数据库,然后展开想要修改的视图所在的数据库。单击“视图”节点,在内容窗格中右击想要修改的视图,从弹出菜单中选择“设计视图”命令,打开如图所示的视图设计器窗口。(注:经过加密的视图不能用此法打开。以下与建立视图的操作类似)要在视图定义中添加引用表或视图,请右击图表窗格,并从弹出菜单中选择“添加表”命令;或单击工具栏上的“添加表”按钮,在“表”或“视图”选项中双击想要添加的表或视图。,9.3 修改视图, 要从视图定义中删除
18、某个引用表或视图,请右击图表窗格,从弹出菜单中选“删除表”命令,或直接按Delete键。要在视图定义中添加引用字段,请在网格窗格中单击某个空白的“列”单元格,从列表中选择所需要的字段名。对于每个引用字段,通过选中或取消“输出”列中的复选框来控制该字段是否在结果集之中显示出来。若要基于某个字段进行分组,请右击该字段,从弹出菜单中选择“分组”。,要在某个字段上设置过滤条件,请在相应的“准则”单元格中输入所需要的运算符和表达式,这与Where子句相对应,如果在该字段上设置了分组,则与Having子句相对应。若要设置更多的过滤条件,请在“或”列中直接输入有关内容。,若要设置视图对象的其他属性,请右击图
19、表窗格的空白处,从弹出菜单中选“属性”命令,然后设置以下选项:输出全部列;输出重复行的的一行;加密浏览;设置要从顶端算起输出多少行记录。若要预览视图的结果集,请右击图表窗格的空白处,并从弹出菜单中选择“运行”命令,或在工具栏上单击“运行”按钮。若要保存对视图定义所做的修改,主动脉右击图表窗格的空白处,并从弹出菜单中选择“保存”命令,或在工具栏上单击保存按钮。,2、使用ALTER View修改视图 ALTER View 视图名 (字段名 , n) With Encryption AS Select 语句 With check option ,对视图改名有两种方法:一是使用企业管理器;二是使用系统
20、存储过程sp_rename。,1、使用企业管理器重命名视图在“树”窗格中展开服务器组,选择一个服务器。展开数据库,然后展开需更名的视图所在的数据库。单击“视图”节点,并在内容窗格中右击需更名的视图,从弹出菜单中选择“重命名”命令,这时视图名称的文本进入编辑状态。或者通过在内容窗格中连续两次单击(不是双击!)想要更改的视图名称,也会达到相同的目的。输入新的视图名称。 通过单击内容窗格的空白处或按Enter键,退出文本编辑状态,完成重命名操作。,9.4 重命名视图,2、使用系统存储过程sp_rename重命名视图 Sp_rename 对象名称 , 新名称 , 对象类型,系统存储过程sp_renam
21、e中的对象类型 . 取 值 描 述 . Column 一个字段 Database 一个由用户定义的数据库 Index 一个由用户定义的索引 . Object 一个由系统表sysobjects跟踪的对象类型,可以是约束 (Check、Foreign Key、Primary Key、Unique Key),也可以 是用户建立的表、 视图、存储过程、触发器以及规则 . UserDataType 一个通过执行系统存储过程sp_addtype添加的用户自定义数据 类型 .,例9-4、将student_view2视图更名为“男生基本情况”。USE jwglGoEXEC sp_rename student_
22、view2 , 男生基本情况 , Object,删除视图有两种方法:一是使用企业管理器;另一是使用Drop View语句。,1、使用企业管理删除视图在“树”窗格中展开服务器组,选择一个服务器;展开数据库,然后展开需删除视图所在的数据库;单击“视图”节点,并在内容窗格中右击需要删除的视图,并从弹出菜单中选择“删除”命令。若想查看该视图与当前数据库中的其他对象之间的依赖关系,请在对话框中单击“显示相关性”按钮。 单击“全部除去”按钮,完成删除操作。,2、使用Drop View删除视图该语句可用于当前数据库中删除一个或多个视图。 Drop View 视图名 , n 删除一个视图后,该视图的定义和其他
23、信息将从相关的系统中删除。,9.5 删除视图,不但可用该视图来检索表中的数据,在满足某些条件的前提下,还可通过该视图添加、修改或删除数据。,1、通过视图检索表数据视图可以像表一样用在FROM子句中作为数据来源。为了提高效率和安全性,通常的做法是将选择查询做成视图,然后又将视图用在其他选择查询中。,例9-5、从视图“男生基本情况”中查询学生姓名为“钱利”的学生资料。USE jwglGoSelect *FROM 男生基本情况Where 姓名=钱利,9.6 使用视图,2、通过视图添加表数据使用Insert语句既可向表中添加一行记录,也可向视图中添加一行记录。由于视图本身是不能用来存储数据的,通过一个
24、视图所添加的记录实质上是存储在由该视图引用的基表中,必须满足一些要求才能通过视图向基表中添加记录。,对未引用字段的要求通常视图中只引用了基表的部分字段,还有一些字段没有在视图中引用,为此应当告诉SQL Server如何在这些未引用字段中填充数据。未引用字段必须具备下列条件之一:,a.该字段允许空值(NULL),SQL Server可在其中填上一个空值;b.该字段设有默认值, SQL Server可在其中填上这个预设的默认值;c.该字段具有自动编号属性, SQL Server可在其中填上一个整数值;d.该字段的数据类型为timestamp, SQL Server可在其中填上一个时间戳数据;e.该
25、字段的数据类型为UniqueIdentifier, SQL Server可在其中填上一个惟一的识别码。,对查询语句的要求a.在查询语句中没有包含计算字段,这些计算字段是由表中的一个或多个字段经过运算或使用函数后而生成的;b.在查询语句中没有使用各种汇总函数,例如AVG、COUNT、SUM、MIN、MAX等。c.在查询语句中没有使用TOP、Group By、或Distinct等子句。,对Insert语句的要求使用Insert一个语句向视图中添加记录时,在这个语句中就只能指定同一个表中的字段。因此,通过视图向多个基表中添加记录,就需要多次执行Insert语句。,例9-6、向视图“男生基本情况”中添
26、加一行记录。学号、姓名、班级、加庭住址、入学时间、出生年月分别为“g9940210”, “赵青”, “g99402”, “南京中山北路10号”, “1999-09-01”, “1985-01-09”。USE jwglGoInsert INTO 男生基本情况 Values(g9940210,赵青,g99402,南京中山北路10号,1999-09-01,1985-01-09),3、通过视图修改表数据首先保证这个视图是可更新的,即查询语句中没有汇总函数、计算字段;在查询语句的FROM子句中必须至少引用一个表。通过视图对基表中的数据进行修改时,需要注意以下3点:,在一个Update语句中修改的字段必须
27、属于同一个基表,要对多个基表中的数据进行修改需要使用多个Update语句。,若在视图定义中用了WITH Check Option子句,则通过视图进行修改时提供的数据就必须满足Select语句中的选择条件,否则Update语句将被中止,并返回错误信息。,对于基表数据的修改,必须满足在字段上设置的约束,例如是否具有惟一性、是否可以为空值等。,例9-7、将视图男生基本情况中钱利同学的家庭住址改为“扬州市南京路8号”USE jwglGoUpdate 男生基本情况 SET 家庭住址 = 扬州市南京路8号Where 姓名 = 钱利Go,关于视图的小结:视图是一种常用的数据库对象。视图与选择查询和数据库表都
28、有密切的联系,可把视图理解为一个基于选择查询的虚拟表。视图提供查看和存取数据的另外一种途径,使用视图不仅可以简化数据操作,还可提高数据库的安全性。使用企业管理器可以很方便地实现对视图的各种操作,包括建立视图定义、修改视图定义、重命名视图和删除视图等,这些操作也可以通过T-SQL语句来完成:使用Create View语句建立视图;使用ALTER View语句修改视图;使用系统存储过程sp_rename重命名视图;使用Drop View语句删除视图。一个视图建立之后,不仅用来从数据库中检索数据,在满足某些条件的情况下,也可通过视图向基表中添加数据,或者修改和删除基表中的数据。,4、通过视图删除表数据通过一个视图删除基表中的数据时,必须保证该视图定义的FROM子句中只引用了一个表,而且删除的记录不能违背视图定义的Where子句中的条件限制。在这个前提下,可用Delete语句从基表中删除一行或多行记录。 Delete from 视图名 Where 搜索条件,
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。