使用SQL语句创建视图5

上传人:宝路 文档编号:48016524 上传时间:2018-07-08 格式:PPT 页数:54 大小:1.35MB
返回 下载 相关 举报
使用SQL语句创建视图5_第1页
第1页 / 共54页
使用SQL语句创建视图5_第2页
第2页 / 共54页
使用SQL语句创建视图5_第3页
第3页 / 共54页
使用SQL语句创建视图5_第4页
第4页 / 共54页
使用SQL语句创建视图5_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《使用SQL语句创建视图5》由会员分享,可在线阅读,更多相关《使用SQL语句创建视图5(54页珍藏版)》请在金锄头文库上搜索。

1、 第4讲 视图 什么 是视 图?基表(base table):独立存在的表 视图虚拟表。在SQL中只存储视图的定义,不存放视图所对应的记录视图的概念视图是从一个或者多个表或视图中导出的表,其结构和数据是建立在对表的查询基础上的。 和真实的表一样,视图也包括几个被定义的数 据列和多个数据行,但从本质上讲,这些数据 列和数据行来源于其所引用的表。视图概述视图的作用 使用户只关注所关心的数据 提高了数据的安全性 提高客户端的查询效率注意,创建视图时应该注意以下情况: 只能在当前数据库中创建视图。 如果视图引用的基表或者视图被删除,则该视图不能再 被使用,直到创建新的基表或者视图。 如果视图中某一列是

2、函数、数学表达式、常量或者来自 多个表的列名相同,则必须为列定义名称。 不能在视图上创建索引 视图的名称必须遵循标识符的规则,且对每个用户必须 是唯一的。此外,该名称不得与该用户拥有的任何表的 名称相同。视图应用视图为基表的行的子集【问题】在XK数据库创建视图v_Student ,只显示Student表中班级编码为 20000001的班级的学生信息 方法1:使用企业管理器 方法2:使用SQL语句 方法3:使用创建视图向导创建视图 SQL语句定义如下:use xkgocreate view v_studentwith encryptionasselect * from studentwhere

3、classno=20000001go练习|创建视图v_Class,只显示Class表中系 部编码为01的系部的班级信息 |创建视图v_StuCouSub,只显示StuCou 表中的StuNo列和CouNo列创建视图 视图为多个表、视图连接组成的复杂查询 最常用的情况 【例】创建视图v_StuCou,显示学生的 学号、姓名和所选的课程名称 特点: 多表查询(其实只需要在正确的select 语句前加上CREATE VIEWAS即可)创建视图 添加表并选择要输出的行练习 创建视图v_CouByCpt,显示计算机应用工程系承担 的选修课程的信息(课程名称、授课老师、上课时间 )use xkgocrea

4、te view v_coubycptas select CouName, Teacher, SchoolTime, DepartNamefrom Course,Department where Course.DepartNo = Department.DepartNoand DepartName = 计算机应用工程系go创建视图(4) 视图为基表的统计汇总 【问题】创建视图v_CouByKind,按课程分类统计报 名人数。 特点:视图定义中使用了GROUP BY子句 注意:在下面的情况下必须明确指明视图每一列的列名 : z视图中的某一列是算术表达式、函数或者常量 z多表连接时,有两个或两个以上

5、的列具有相同的 列名 思考:能否将课本P51图2-2-26的查询结果作为视图创建视图创建视图use xkgocreate view V_coubykindas select kind as 课程分类, sum(willnum) as 报名总数from coursegroup by kind go练习 创建视图v_CouByDep,显示各个系部开 设的选修课的数量和报名人数创建视图SQL语句use xkgocreate view v_CouByDep asselect departname 课程名称,课程数量=count(*) ,报名人数=sum(willnum) from department

6、,course where department.departno=course.departnogroup by departnamego显示视图信息 显示视图信息 显示视图的定义信息sp_helptext 显示视图的参照对象和字段信息sp_depends 例:显示v_coubycpt的定义信息、参照对象和字 段信息。sp_helptext v_coubycptgosp_depends v_coubycptgo修改视图 格式: ALTER VIEW view_name AS select_statement 【问题】将v_ CouByCpt进行修改,使其显示 旅游系所开设的所有课程信息。 加

7、密视图 WITH ENCRYPTION修改视图use xkgoalter view v_coubycptasselect CouName, Teacher, SchoolTime, DepartNamefrom Course,Department where Course.DepartNo = Department.DepartNoand DepartName = 旅游系go显示视图信息 显示视图信息 显示视图的定义信息sp_helptext 显示视图的参照对象和字段信息sp_depends 例:显示v_coubycpt的定义信息、参照对象和字 段信息。sp_helptext v_coubyc

8、ptgosp_depends v_coubycptgo重命名视图 重命名视图 使用企业管理器 使用系统存储过程sp_rename 例:将视图v_coubycpt重新命名为 v_coucount. sp_rename v_coubycpt,v_coucount go 删除视图 通过企业管理器修改 应用SQL语句来删除 SQL语句格式如下: DROP VIEW view_name 也可以同时删掉多个视图。 例:删除试图v_coubycpt和v_stucou 。 Drop view v_coubycpt, v_stucou更新视图 INSERT操作 UPDATE操作 DELETE操作 注意:由于视图

9、实际上并不存储记录,因 此更新视图的操作最终都转化为对基表的 更新操作 使用WITH CHECK OPTION:保证在进 行视图的更新操作时,所插入、更新、删 除的记录,满足视图定义中查询的条件表 达式更新视图使用视图修改数据时,需要注意以下几点: 修改视图中的数据时,不能同时修改两个或者多个基表 ,可以对基于两个或多个基表或者视图的视图进行修改 ,但是每次修改都只能影响一个基表。 不能修改那些通过计算得到的字段。 如果在创建视图时指定了WITH CHECK OPTION选项, 那么所有使用视图修改数据库信息时,必须保证修改后 的数据满足视图定义的范围。 执行UPDATE、DELETE命令时,

10、所删除与更新的数据 必须包含在视图的结果集中。 如果视图引用多个表时,无法用DELETE命令删除数据 。更新视图 利用视图添加新记录 例:首先创建了一个新的视图v_teacher,该视图基于表 teacher创建。 create view v_teacher as select teacherno, teachername, departno,salary from teacher Where salary3000 go Insert into v_teacher Values(006,李田,3100,02) go更新视图use xkgoalter view v_teacherasselect

11、 ID, teachername, salary,departno from teacherWhere salary3000with check optiongoInsert into v_teacherValues(10,李田,2900,02)go更新视图 利用视图修改记录 将视图v_teacher中名为张胜利的老师改为 王静西。use xkgoupdate v_teacherset teachername=王静西where teachername=张胜利go更新视图 使用视图删除记录,可以删除任何基表中 的记录,直接利用DELETE语句删除记录 即可。但应该注意,必须指定在视图中定 义过的

12、字段来删除记录。 例:利用视图v_teacher删除表teacher中 姓名为王静西的记录。delete from v_teacherwhere name=王静西练习 创建视图v_StuSQL,显示00电子商务 班并选修了SQL Server实用技术的学生 信息(学号、姓名)。练习use xkgocreate view v_stusqlasselect student.stuno,stuname,classno from student,class,course,stucouwhere student.stuno=stucou.stunoand student.classno=class.cl

13、assnoand course.couno=stucou.counoand classname=00电子商务and couname=SQL Server实用技术go思考 问题:对于上述建立的试图V_stusql,我们 可否做以下操作。向该视图中插入新的一行 (00000061,林思雨 ,20000001) , 如果可以插入那么在什么情况下可以插入 。 注:原来的student表中并不存在学号 00000061。思考: 将视图定义改变如下use xkgoalter view v_stusqlasselect student.stuno,stuname,student.classno from s

14、tudent,class,course,stucouwhere student.stuno=stucou.stunoand student.classno=class.classnoand course.couno=stucou.counoand classname=00电子商务and couname=SQL Server实用技术with check optiongo思考 问题:1.此时还能否将下列一行记录插入到该视图 中。(00000062,林雨,20000001)2.能否通过视图将学号为00000001的学生 的姓名改为林小斌。3.能否将视图中下面所示的这行记录删除。(00000001,林斌)小结 视图可被看成是虚拟表或存储查询 使用视图可提高数据库性能和安全性 对视图进行修改会影响基表数据

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号