资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,1/10/2022,#,单击此处编辑母版标题样式,编辑母版文本样式,第二级,第三级,第四级,第五级,2022/9/11,#,YCF,(中职)计算机组装与维护A0601教学课件,SQL Server,数据库项目教程,教学课件,项目,6,创建和管理视图,我们毕业啦,其实是答辩的标题地方,任务,1,创建视图,知识准备,创建单表视图,创建多表视图,创建基于视图的视图,创建加密视图,生成视图脚本,CONTANTS,思维导图,1.,知识准备,1.1,视图的含义,在,SQL Server,中,英文单词,View,为视图的意思。视图是从一个或几个基本表(或视图)中导出的虚拟的表。在系统的数据字典中仅存放了视图的定义,不存放视图对应的数据。视图的定义存在数据库中,与此定义相关的数据并没有再存一份于数据库中。通过视图看到的数据存放在基表中。,视图看上去非常像数据库的物理表,对它的操作同任何其它的表一样。当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。由于逻辑上的原因,有些视图可以修改对应的基表,而有些则不能(仅仅能查询)。,1.2,视图的优点,视图有很多优点,主要表现在:视点集中、简化操作、定制数据、合并分割数据和安全性等方面。,(,1,)视点集中。视图集中即是使用户只关心它感兴趣的某些特定数据和他们所负责的特定任务。这样通过只允许用户看到视图中所定义的数据而不是视图引用表中的数据而提高了数据的安全性。,(,2,)简化操作。视图大大简化了用户对数据的操作。因为在定义视图时,若视图本身就是一个复杂查询的结果集,这样在每一次执行相同的查询时,不必重新写这些复杂的查询语句,只要一条简单的查询视图语句即可。可见视图向用户隐藏了表与表之间的复杂的连接操作。,(,3,)定制数据。视图能够实现让不同的用户以不同的方式看到不同或相同的数据集。因此,当有许多不同水平的用户共用同一数据库时,这显得极为重要。,1.2,视图的优点,(,4,)合并分割数据。在有些情况下,由于表中数据量太大,故在表的设计时常将表进行水平分割或垂直分割,但表的结构的变化却对应用程序产生不良的影响。如果使用视图就可以重新保持原有的结构关系,从而使外模式保持不变,原有的应用程序仍可以通过视图来重载数据。,(,5,)安全性。视图可以作为一种安全机制。通过视图用户只能查看和修改他们所能看到的数据。其它数据库或表既不可见也不可以访问。如果某一用户想要访问视图的结果集,必须授予其访问权限。视图所引用表的访问权限与视图权限的设置互不影响。,视图的安全性可以防止未授权用户查看特定的行或列,使用户只能看到表中特定行的方法如下:,在表中增加一个标志用户名的列;,建立视图,是用户只能看到标有自己用户名的行;,把视图授权给其他用户。,1.3,视图的缺点,(,1,)损失一定的性能。,sql server,必须把视图查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,,sql server,也要把它变成一个复杂的结合体,需要花费一定的时间。,(,2,)修改限制。当用户试图修改试图的某些信息时,数据库必须把它转化为对基本表的某些信息的修改,对于简单的试图来说,这是很方便的,但是,对于比较复杂的试图,可能是不可修改的。在后期的维护上,数据库的表结构变了,也会影响视图的改变,造成维护繁琐。,所以在定义数据库的时候,要合理地使用视图。,1.4,创建视图的语法,select_statement,:,定义视图的,SELECT,语句,但是,视,图定义中的,SELECT,子句不能包括下列内容:,(,1,),ORDER BY,子句,除非在,SELECT,语句的选择列表中也有一个,TOP,子句。因为,ORDER BY,子句仅用于确定视图定义中的,TOP,或,OFFSET,子句返回的行。,ORDER BY,不保证在查询视图时得到有序结果,除非在查询本身中也指定了,ORDER BY,。,(,2,),INTO,关键字,(,3,),OPTION,子句,(,4,)引用临时表或表变量。,CREATE VIEW (column ,n ),WITH ENCRYPTION,AS,select_statement,WITH CHECK OPTION,1.4,创建视图的语法,CHECK OPTION,:,要求对该视图执行的所有数据修改语句都必须符合,select_statement,中所设置的条件。通过视图修改行时,,WITH CHECK OPTION,可确保提交修改后,仍可通过视图看到数据。,ENCRYPTION,:,加密视图,使用,WITH ENCRYPTION,可防止在,SQL Server,复制过程中发布视图。,CREATE VIEW (column ,n ),WITH ENCRYPTION,AS,select_statement,WITH CHECK OPTION,2.,创建单表视图,在学生成绩数据库,dbStudentScore,中,完成以下操作:,(,1,)创建视图,VbStudentInfo,,查询学号,姓名,性别,出生年月日。,本案例配备微课视频,2.1,任务描述,经分析,子任务属于单表查询、多表查询和基于视图和表的综合查询。,基于单表查询的视图,VbStudentInfo,。显示的数据字段,都在学生表(,tbStudent,)这一个表中可以查询出来,属于单表查询。已知学生的身份证号,可以使用函数把出生日期提取出来,如,SUBSTRING,()函数。,2.2,任务分析,-,在学生成绩数据库,dbStudentScore,中,完成以下操作:,-,(,1,)创建视图,VbStudentInfo,,查询学号,姓名,性别,出生年月日。,create,view,VbStudentInfo,as,select,StudentID,StudentName,Sex,SUBSTRING,(,IDnumber,7,8,),as,studentBirthday,from,tbStudent,go,参考答案,3.,创建多表视图,在学生成绩数据库,dbStudentScore,中,完成以下操作:,(,2,)创建视图,VbStudentInfo,,查询学号,学生姓名,性别,班级名称,专业名称,院系名称,班主任姓名,班主任电话信息。,3.1,任务描述,本案例配备微课视频,(,2,)基于多表查询的视图,VbStudentInfo,:表,tbStudent,有学生姓名和性别,表,tbClass,有班级名称,表,tbDepartment,有系部名称,表,tbMajor,有专业名称,表,tbTeacher,有班主任姓名,班主任电话。这,4,个表有符合“主键,-,外键”的约束关联,可以关联查询到对应数据。,3.2,任务分析,-,(,2,)创建视图,VbStudentMoreInfo,,查询学号,学生姓名,性别,班级名称,专业名称,院系名称,班主任姓名,班主任电话信息。,create,view,VbStudentMoreInfo,as,(,SELECT,tbStudent,.,StudentID,tbStudent,.,StudentName,tbStudent,.,Sex,tbClass,.,ClassName,tbMajor,.,MajorName,tbDepartment,.,DepartmentName,tbTeacher,.,TeacherName,tbTeacher,.,Telephone,FROM,tbClass,INNER,JOIN,tbMajor,ON,tbClass,.,MajorID,=,tbMajor,.,MajorID,INNER,JOIN,tbDepartment,ON,tbMajor,.,DepartmentID,=,tbDepartment,.,DepartmentID,INNER,JOIN,tbStudent,ON,tbClass,.,ClassID,=,tbStudent,.,ClassID,INNER,JOIN,tbTeacher,ON,tbClass,.,HeadMasterTeacherID,=,tbTeacher,.,TeacherID,),go,3.3,参考答案,4.,创建基于视图的视图,4.1,任务描述,在学生成绩数据库,dbStudentScore,中,完成以下操作:,(,3,)创建视图,vbCourseInfo,显示学号,姓名,性别,出生年月日,课程名称,成绩总评。,本案例配备微课视频,4.2,任务分析,(,3,)基于基表和视图,vbCourseInfo,:学号,姓名,性别,出生年月日这几个信息在视图,VbStudentInfo,中,可以利用它作为条件。表,tbScore,有学号和总评成绩,表,tbCourse,有课程名称字段。可以把视图,VbStudentInfo,,表,tbCourse,和表,tbScore,建立联接条件,关联查询到对应数据。,-,(,3,)创建视图,vbCourseInfo,显示学号,姓名,性别,出生年月日,课程名称,成绩总评。,create,view,VbCourseInfo,as,select,VbStudentInfo,.,StudentID,StudentName,Sex,studentBirthday,CourseName,ScoreAll,from,VbStudentInfo,tbCourse,tbScore,where,VbStudentInfo,.,StudentID,=,tbScore,.,StudentID,and,tbCourse,.,CourseID,=,tbScore,.,CourseID,go,参考答案,5.,创建加密视图,在学生成绩数据库,dbStudentScore,中,完成以下操作:,(,4,)创建加密视图,vbStdentBirthday,显示学号,姓名,性别,出生年,出生月,出生日,身份证号。,5.1,任务描述,本案例配备微课视频,(,4,)加密视图,vbStdentBirthday,:显示的数据字段都在学生表,tbStudent,中可以查询出来,属于单表查询。加密视图可以用参数,WITH ENCRYPTION,。已知学生的身份证号,可以使用函数把出生日期,年,月,日提取出来,如,SUBSTRING,()函数。,5.2,任务分析,-,(,4,)创建加密视图,vbStdentBirthday,显示学号,姓名,性别,出生年,出生月,出生日,身份证号。,create,view,VbStdentBirthday,WITH,ENCRYPTION,as,select,StudentID,StudentName,Sex,SUBSTRING,(,IDNumber,7,4,),as,year,SUBSTRING,(,IDNumber,11,2,),as,month,SUBSTRING,(,IDNumber,13,2,),as,day,IDNumber,from,tbStudent,go,参考答案,6.,生成视图脚本,在学生成绩数据库,dbStudentScore,中,完成以下操作:,(,5,)为视图,VbStudentInfo,自动生成“,Create,脚本”。,6.1,任务描述,(,5,)通过对视图,VbStudentInfo,单击右键,选择“编写视图脚本为”可以自动生成,Create View,脚本。,6.2,任务分析,-,(,5,)为视图,VbStudentInfo,自动生成“,Create,脚本”。,/*Object:View dbo.VbStudentInfo */,SET,ANSI_NULLS,ON,GO,SET,QUOTED_IDENTIFIER,ON,GO,create,view,dbo,.,VbStudentInfo,as,select,StudentID,Studen
展开阅读全文