首页计算机计算机软件数据库原理与应用(SQLServer版) 07 第7章 视图.pptx

07 第7章 视图.pptx

页数:36页文件大小:236.1 KB来源: 数据库原理与应用(SQLServer版)ppt课件

本课件讲解视图的概念与作用,演示用对象资源管理器与 CREATE VIEW 语句创建、修改和删除视图的方法,并说明通过视图查询与更新数据时需要注意的限制条件,帮助理解视图与基表的关系。

第7章视图封面,讲解视图概念、创建删除视图与通过视图更新数据
基本概念,涵盖视图是一个虚拟的表、视图是用SQL语句而不是用数据构与使用视图不仅可以简化数据库操作等要点
例1示例,展示建立计算机系选修了00000001的具体写法
查看本课件的文字版(共 36 页,供检索与复制)

第1页:第7章视图

第7章视图

第2页:基本概念

基本概念

视图
一个虚拟的表,该表中的记录是由一个查询语句执行后所得到的查询结果所构成的。
视图是用SQL语句而不
用数据构造的,一个视图看起来像一个表,而且它的操作也与基表相似。但视图并不是表,它只是一组返回数据的SQL语句。

第3页:例1:建立计算机系选修了00000001

例1:建立计算机系选修了00000001

例1建立计算机系选修了00000001号课程的学生视图S_1。CREATE VIEW S_1(SID,Sname,Score)ASSELECT StuInfo.SID,StuInfo.Sname,ScoreFROM StuInfo,ScoreInfoWHERE StuInfo.Dept= '计算机系' ANDStuInfo.SID = ScoreInfo.SID ANDScoreInfo.CID= '00000001';

第4页:视图定义后

视图定义后

  • 视图定义后,我们可以象查询基本表一样用Select来查询视图,而且,对于一部分视图,我们也可以使用INSERT、DELETE和UPDATE语句来修改视图中的数据。

第5页:视图有以下优点

视图有以下优点

  • (1)为用户集中数据,简化用户的数据查询和处理。有时用户所需要的数据分散在多个表中,定义视图可将它们集中在一起,从而方便用户的数据查询和处理。
  • (2)屏蔽数据库的复杂性。用户不必了解复杂的数据库中的表结构,并且数据表的更改也不影响用户对数据库的使用。
  • (3)简化用户权限的管理。只需授予用户使用视图的权限,而不必指定用户只能使用表的特定列,也增加了安全性。
  • (4)便于数据共享。各用户不必都定义和存储自己所需的数据,可共享数据库的数据,这样同样的数据只需存储一次。
  • (5)可以重新组织数据以便输出到其他应用程序中。

第6页:注意:只有在当前数据库中才能创

注意:只有在当前数据库中才能创

  • (1)只有在当前数据库中才能创建视图。
  • (2)给视图的命名必须遵循标识符命名规则,不能与表同名,且对每个用户视图名必须是惟一的,即对不同用户,即使是定义相同的视图,也必须使用不同的名字。
  • (3)不能把规则、默认值或触发器与视图相关联。
  • (4)不能在视图上建立任何索引,包括全文索引。

第7页:视图的创建

视图的创建

  • 在对象资源管理器中创建
  • 用CREATE VIEW命令创建

第8页:在对象资源管理器中创建

在对象资源管理器中创建

  • 在“对象资源管理器”窗口中展开【数据库】文件夹,然后再展开需要建立视图的数据库(如teachingData),在【视图】选项上右击鼠标,选择【新建视图】命令。
  • 添加相应的数据对象。
  • 选择字段,条件等。
  • 单击【!执行】按钮调试。
  • 单击【保存】按钮,并在弹出的对话框中输入视图名。

第9页:例2:在对象资源管理器中创建学生成绩

例2:在对象资源管理器中创建学生成绩

例2,在对象资源管理器中创建学生成绩stu_scoreA视图,要求其中包括字段sid,sname,cname,score.

第10页:用CREATE VIEW命令创建

用CREATE VIEW命令创建

CREATE VIEW <view_name>[ (column [ ,...n ] ) ][ WITH { ENCRYPTION|SCHEMABINDING|VIEW_METADATA]}AS select_statement [ ; ][ WITH CHECK OPTION ]

第11页:说明:view_name为新创

说明:view_name为新创

说明view_name为新创建的视图指定的名字;column为在视图中包含的列名;ENCRYPTION选项表示加密视图;SCHEMABINDING选项表示将视图绑定到基础表的架构;VIEW_METADATA选项表示指定为引用视图的查询请求浏览模式的元数据时,SQL Server实例将向DB-Library、ODBC和OLE DB API返回有关视图的元数据信息,而不返回基表的元数据信息;select_ statement设置选择条件;WITH CHECK OPTION选项强制视图上执行的所有数据修改语句都必须符合在子查询中设置的条件表达式。

第12页:例3:利用T-SQL命令语句创建学

例3:利用T-SQL命令语句创建学

例3 利用T-SQL命令语句创建学生成绩stu_scoreB视图,要求其中包括字段sid,sname,cname,score。分析:第一步,编写满足要求的查询语句。select scoreinfo.sid,sname,cname,scorefrom stuinfo,courseinfo,scoreinfowhere stuinfo.sid=scoreinfo.sid andcourseinfo.cid=scoreinfo.cid第二步,在前面的查询语句前加上创建视图命令。CREATE VIEW视图名(视图列_list)AS

第13页:最终结果

最终结果

CREATEstu_scoreB(学号,姓名,课程,成绩)ASselect scoreinfo.sid,sname,cname,scorefrom stuinfo,courseinfo,scoreinfowhere stuinfo.sid=scoreinfo.sid andcourseinfo.cid=scoreinfo.cid

第14页:例4:建立行列子集视图建立计算机系学

例4:建立行列子集视图建立计算机系学

例4----建立行列子集视图建立计算机系学生的学号、姓名和专业的视图student_1。CREATE VIEW Student_1ASSELECT SID,Sname, MajorFROM StuInfoWHERE Dept= '计算机系'

第15页:参数:WITH CHECK OPTION

参数:WITH CHECK OPTION

参数----WITH CHECK OPTION定义视图时,可以设置检查选项WITH CHECKOPTION,使得当用视图修改和删除数据,检查这些数据是否符合由select_statement设置的条件,不允许破坏视图定义中设置的这些条件。

第16页:例5:带检查选项的视图

例5:带检查选项的视图

例5 建立使用WITH CHECK OPTION的视图建立计算机系学生的学号、姓名和专业的视图Student_2,并要求通过该视图进行的更新操作只涉及计算机学院学生。CREATE VIEW Student_2ASSELECT SID,Sname, Dept FROM StuInfoWHERE Dept= '计算机系'WITH CHECK OPTION

第17页:例6:建立带表达式的视图

例6:建立带表达式的视图

例6 建立带表达式的视图定义一个反映学生年龄的视图StuAge。CREATE VIEW StuAge(SID,Sname,Sage)ASSELECT SID,Sname,year(getdate())-year(birthday)FROM StuInfo注意:带表达式的视图必须明确定义组成视图的各个属性列名。

第18页:例7:建立分组视图将学生的学号及他

例7:建立分组视图将学生的学号及他

例7 建立分组视图将学生的学号及他的平均成绩定义为一个视图ScoreAvg。CREATE VIEW ScoreAvg(学号,平均成绩)ASSELECT SID,AVG(Score)FROM ScoreInfoGROUP BY SID 注意:分组视图也必须明确定义组成视图的各个属性列名。

第19页:例8:建立基于多个基表的视图建立计算

例8:建立基于多个基表的视图建立计算

例8----建立基于多个基表的视图建立计算机学院选修了00000001号课程的学生视图StuCourse1。CREATE VIEW StuCourse1(学号,姓名,成绩)ASSELECT StuInfo.SID,Sname,ScoreFROM StuInfo,ScoreInfoWHERE Dept= '计算机系' ANDStuInfo.SID=ScoreInfo.SID ANDScoreInfo.CID= '00000001';

第20页:例9----建立基于视图的视图

例9----建立基于视图的视图

  • 建立计算机学院选修了00000001号课程且成绩在60分以上的学生的视图。CREATE VIEW Stu_Pass1ASSELECT学号,姓名,成绩FROM StuCourse1WHERE成绩>=60

第21页:视图的查询1、查询视图的定义

视图的查询1、查询视图的定义

  • 用系统存储过程sp_helptext来查询视图的定义。

第22页:例10:使用T-SQL语句来查看te

例10:使用T-SQL语句来查看te

例10, 使用T-SQL语句来查看teachindData数据库的student_1视图的定义。USE teachingData EXEC sp_helptext student_1

第23页:查询视图记录

查询视图记录

  • “对象资源管理器””窗口中展开【数据库】/视图所属的数据库/【视图】,然后在需查询的视图上右击鼠标,选择【打开视图】命令来查看视图记录;
  • 使用SELECT…FROM view_name命令来查询视图记录。

第24页:例11:查询计算机学院学生的学号

例11:查询计算机学院学生的学号

例11, 查询计算机学院学生的学号、姓名和专业的信息。Use teachingData SELECT * FROM Student_1

第25页:例12:查询视图并排序

例12:查询视图并排序

例12 查询视图stu_scoreB,要求按课程名称进行排序。select *from stu_scoreBorder by课程

第26页:注意:视图不能用ORDER BY

注意:视图不能用ORDER BY

  • 在创建视图时不能使用ORDER BY子句。例如,下面的命令语句是错误的:select scoreinfo.sid,sname,cname,scorefrom stuinfo,courseinfo,scoreinfowhere stuinfo.sid=scoreinfo.sid andcourseinfo.cid=scoreinfo.cidorder by cname

第27页:视图的修改

视图的修改

  • 视图定义的修改
  • 视图的重命名
  • 视图记录的修改

第28页:视图定义的修改

视图定义的修改

  • “对象资源管理器”窗口中展开【数据库】/视图所属的数据库/【视图】,然后在需修改的视图上右击鼠标,选择【修改】命令;
  • 在查询编辑器中用ALTER VIEW语句来修改视图的定义。

第29页:例13:修改视图

例13:修改视图

例13, 修改视图“Student_1”为查看计算机学院学生的学号、姓名、性别和专业。ALTER VIEW Student_1ASSELECT SID,sname,sex,MajorFROM StuInfoWHERE Dept= '计算机系';

第30页:重命名视图

重命名视图

  • 在“Microsoft SQL Server Management Studio”中的“对象资源管理器”窗口中展开【数据库】/视图所属的数据库/【视图】,然后在需更名的视图上右击鼠标,选择【重命名】命令;
  • 在查询编辑器中使用系统存储过程sp_rename来重命名视图。

第31页:例14:将视图student_1更名

例14:将视图student_1更名

  • 将视图student_1更名为“student_computer”。Use teachingDataGoEXEC sp_rename 'student_1', 'student_computer'

第32页:视图记录的修改

视图记录的修改

  • 视图记录的修改可以在“Microsoft SQL ServerManagement Studio”中的“对象资源管理器”窗口中展开【数据库】/视图所属的数据库/【视图】,然后在需修改的视图上右击鼠标,选择【打开视图】命令,然后根据需要进行修改;
  • 在查询编辑器中用INSERT、UPDATE和DELETE命令来修改视图记录。
  • 一般不建议对视图记录进行插入或删除操作。

第33页:例15:利用视图更新数据

例15:利用视图更新数据

例15, 利用视图StuCourse1为计算机系中每位学生的高等数学成绩减少5分。Update StuCourse1Set成绩=成绩-5

第34页:例16:删除视图

例16:删除视图

例16,从teachingData数据库中删除视图student_2和sc_1。USE teachingDataGoDrop View student_2,sc_1

第35页:小结:基本概念

小结:基本概念

小结 基本概念(视图是一个虚拟的表) 视图的创建(CREATE VIEW) 视图的重命名(sp_rename) 视图的修改(修改视图定义:ALTER VIEW;修改视图记录INSERT、UPDATE和DELETE) 视图的删除(Drop View)

第36页:作业:上机实验操作

作业:上机实验操作

  • 1、完成本讲中的所有例题的操作。
  • 2、在teachingData数据库中建立视图score_top,要求在该视图中显示各门学科的CID和score_max(即学科的最高分)。
  • 3、利用teachingData数据库中的相关的数据表和视图score_top新建一视图top_stu,要求在该视图中显示各门学科的学科名cname,取得最高分的学生名sname和成绩score。
  • 4、试用T-SQL语句新建一视图stu_comp,要求该视图中只包括计算机系学生的学号sid、姓名sname、年龄sage和班级class视图。
  • 5、试用T-SQL语句修改视图stu_comp,要求该视图中只包括05级计算机系学生的学号sid、姓名sname、年龄sage、班级class。
  • 6、试用T-SQL语句建立成绩低于60分的学生的学号、姓名、班级、成绩的视图stu_fall。
顶部目录