实验八 数据库视图的定义及使用
- 格式:doc
- 大小:32.00 KB
- 文档页数:2
实验(四)数据库的视图操作实验一、实验目的和要求(1)掌握SQL Server中的视图创建向导和图表创建向导的使用方法;(2)加深对视图和SQL Server图表作用的理解。
(3)掌握数据库安全性的操作方法。
二、实验内容和原理1. 基本操作实验(1)在SQL Server企业管理器中调出Create View Wizard(创建图表向导),按下列Transact-SQL描述的视图定义,创建借阅_计算机图书视图。
CREATE VIEW 借阅_计算机图书AS SELECT 图书.*,借阅.*FROM 图书,借阅WHERE图书.编号=借阅.书号AND图书.类别=‘计算机’(2)在SQL server企业管理器中调出Create View Wizard(创建图表向导),完成在图书-读者数据库中建立一个图书_借阅图表操作。
要求该图表包括图书和借阅两个表,并包括图书与借阅之间的“图书.书号=借阅.书号”外码与被参照表之间的关联。
(3)查看上述实验结果。
如果结果有误,予以纠正。
2. 提高操作实验在学生-课程数据库中用Transact-SQL语句描述下列视图定义。
(1)从学生表中建立查询所有男(女)生信息的视图STU_SEX。
视图的列名为SNO、SNAME、SSEX和SAGE。
(2)从课程表中建立查询所有课程先修课信息的视图课程_PRE。
视图的列名为课程号、课程名称和先修课名称。
(3)从选修表中建立查询成绩大于等于80信息的视图STU_CJ1。
视图的列名为学号、课程号和成绩。
(4)从学生、选修和课程三个表建立查询学生选修情况的视图STU_CJ2。
视图的列名为姓名、课程名称和成绩。
(5)从学生、选修和课程三个表建立查询学生选修情况并且成绩小于80的视图STU_CJ3。
视图的列名为姓名、课程名称和成绩。
(6)利用Transact-SQL命令修改视图STU_SEX。
把视图的列名改为学号、姓名、性别和年龄,把加上“WITH CHECK OPTION”选项。
数据库视图实验报告一、实验目的本次实验的主要目的是深入理解数据库视图的概念、特点和用途,并通过实际操作掌握如何创建、修改和使用视图来优化数据库的查询和管理。
二、实验环境本次实验使用的数据库管理系统为 MySQL 80,操作系统为Windows 10。
三、实验原理1、视图的定义视图是一种虚拟表,它是从一个或多个基本表(或视图)导出的表。
视图本身并不包含数据,而是根据定义从基本表中动态获取数据。
2、视图的优点提供数据的逻辑独立性:当基本表的结构发生变化时,只要视图的定义不变,用户通过视图所得到的数据仍然是一致的。
简化数据查询和操作:可以将复杂的查询定义为视图,使用户能够更方便地获取所需的数据。
增强数据安全性:可以通过视图限制用户对敏感数据的访问,只展示用户有权查看的部分数据。
四、实验内容与步骤1、创建视图使用以下语句创建一个名为`student_info_view` 的视图,该视图包含学生表`students` 中的学号、姓名、年龄和专业信息:```sqlCREATE VIEW student_info_view ASSELECT student_id, student_name, age, majorFROM students;```2、查询视图通过以下语句查询创建的视图:```sqlSELECT FROM student_info_view;```3、修改视图修改视图的定义,增加一个成绩列`grade` ,语句如下:```sqlALTER VIEW student_info_view ASSELECT student_id, student_name, age, major, gradeFROM students;```4、删除视图使用以下语句删除视图:```sqlDROP VIEW student_info_view;```五、实验结果与分析1、创建视图成功后,通过查询视图能够获取到预期的学生信息,证明视图的定义和数据提取是正确的。
数据库视图的解释
数据库视图
1.什么是视图
视图是⼀个虚拟的表,它不在数据库中以存储数据的
形式保存,是在使⽤视图的时候动态⽣成。
2.视图的特点
2.1视图是由基本表产⽣的虚表
2.2视图的更新和删除会影响基础表
2.3基础表的更新和删除也会影响到视图
3.视图的作⽤
对视图的操作与对基本表的操作都是⼀样的(包括alter,create,insert into ,update ,delete ,select),且⼆者任意⼀⽅的字段值被修改,都会实时影响到对⽅(如修改view的字段值,会同步修改table相应的字段值);
但是视图的创建是基于基本表的,它的作⽤可以对基本表的敏感信息进⾏保护;
在实际⼯作中,出于安全考虑,将⽤户常⽤的信息创建成视图给⽤户调⽤,避免了直接操作基本表!
4. 显⽰⽬前有哪些视图
show tables;创建的视图都在表的最下⾯。
create view A as (select id,name from dcs); //将查询结果集创建为视图A
show CREATE VIEW A(视图名)//创建给定视图
Show tables //查看视图
drop view 视图名; //删除视图。
什么是视图:视图(view):从一个或几个基本表中根据用户需要而做成一个虚表1:视图是虚表,它在存储时只存储视图的定义,而没有存储对应的数据2:视图只在刚刚打开的一瞬间,通过定义从基表中搜集数据,并展现给用户视图与查询的区别:视图和查询都是用由sql语句组成,这是他们相同的地方,但是视图和查询有着本质区别:它们的区别在于:1:存储上的区别:视图存储为数据库设计的一部分,而查询则不是.2:更新限制的要求不一样要注意:因为视图来自于表,所以通过视图可以间接对表进行更新,我们也可以通过update语句对表进行更新,但是对视图和查询更新限制是不同的,以下我们会知道虽然通过视图可以间接更新表但是有很多限制.3:排序结果:通过sql语句,可以对一个表进行排序,而视图则不行。
比如:创建一个含有order by子句的视图,看一下可以成功吗?视图的优点:为什么有了表还要引入视图呢?这是因为视图具有以下几个优点:1:能分割数据,简化观点。
可以通过select和where来定义视图,从而可以分割数据基表中某些对于用户不关心的数据,使用户把注意力集中到所关心的数据列.进一步简化浏览数据工作2:为数据提供一定的逻辑独立性。
如果为某一个基表定义一个视图,即使以后基本表的内容的发生改变了也不会影响“视图定义”所得到的数据3:提供自动的安全保护功能。
视图能像基本表一样授予或撤消访问许可权4:视图可以间接对表进行更新,因此视图的更新就是表的更新视图的创建和管理视图的创建1:通过sql语句格式:create view 视图名 as select 语句试一试:分别创建关于一个表或多个表的视图[因为视图可以来自于多表] 2:通过企业管理器说明:1:在完成视图的创立之后,就可以像使用基本表一样来使用视图2:在创建视图时,并非所有的select子查询都可用,如:compute和compute by,order by[除非与top一起连用]3:但在查询时,依然都可以用在创建时禁用的select子查询4:在视图创建时,必须为没有标题列指定标题[思考:能否不用select语句来创建一个视图]视图的删除:1:通过sql语句:drop view 视图名2:通过企业管理器说明:与删除表不同的是,删除视图后只是删除了视图了定义,并没有删除表中的数据.[查看相关性]修改视图的定义1:通过企业管理器2:通过sql语句:格式:alter view 视图名 as 新的select语句浏览视图信息 sp_helptext 视图名 [查看视图创建的语句]如何通过视图修改基本表的数据.A:在视图上使用insert语句通过视图插入数据与直接在表中插入数据一样,但视图毕竟不是基本表.因此在进行数据插入时还是有一定的限制1:如果视图上没有包括基本表中属性为not null[不能为空]的列,那么插入操作会因为那些列是null值而失败.2:如果某些列因为某些规则或约束的限制而不能直接接受从视图插入的列时,插入会失败3:如果在视图中包含了使用统计函数的结果,或是包含计算列,则插入操作会失败4:不能在使用了distinct语句的视图中插入值5:不能在使用了group by语句的视图中插入值B:使用update更新视图中的数据1:更新视图与更新表格一样,但是在视图中使用了多个基本表连接的情况下,每次更新操作只能更新来自基本表的一个数据列例如:创建以下视图:create view del asselect 职工号,姓名,部门名称,负责人 from work1,部门where work1.部门编号=部门.部门编号如果再执行下面的语句时:update del set 职工号='001',部门名称='wenda'where 职工号='01'[出现错误]只能够改成:update del set 职工号='001' where 职工号='01'update del set 部门名称='wenda' where 职工号='01'2:不能在使用了distinct语句的视图中更新值3:不能在使用了group by语句的视图中更新值C:使用delete删除视图中数据.通过视图删除数据最终体现为从基本表中删除数据格式:delete 视图名 [where 条件]说明:当视图由两个以上的基表构成时,不允许删除视图的数据例如:建一个视图kkcreate view kk asselect 职工号,姓名,性别,部门名称 from work1,部门 where work1.部门编号=部门.部门编号 [试着去删除]使用with check option的视图如果不了解视图定义内容,则常常会发生向视图中输入不符合视图定义的数据的情况.比如:create view xm asselect * from work where 性别='男'完全可以插入insert xm values('001','女',23,'2400'....)尽管从意义上来说是不合理的,但是上述语句是正确的.为了防止这种情况的发生,可以使用with check option子句来对插入的或更改的数据进行限制.比如:create view xm asselect * from work where 性别='男' with check option使用schemabinding的视图[使用绑定到构架]我们知道视图是依赖于表,如果在一个表中创建一个视图,今后如果这个表被删除了,则这个视图将不可再用了.为了防止用户删除一个有视图在引用的表,可以在创建视图的时候加上schemabinding关键字.比如:create view 基本工资 with SCHEMABINDINGas select 姓名,性别,基本工资 from dbo.work说明:1:不能使用“*”来创建此类型的视图2:创建此类型的视图时,一定要加上dbo.表名.3:如果在某个表中定义了此类视图,则用户将不能对表的结构进行修改,否则会删除这些绑定4:如果用户对表的结构进行列改名,则会删除绑定而且视图不可用.5:如果用户对表的结构进行列的类型或者大小修改,则会删除绑定但视图可用,此时用户可以删除视图所引用的表.使用with encryption对视图进行加密为了保护创建视图定义的原代码,可以对视图进行加密.比如:create view kk with encryptionas select * from work where 职称='经理'用sp_helptext来查看一下.或用企业管理器查看一下.说明:如果应用此项用户将无法设计视图使用视图加强数据的安全一般通过使用视图共有三种途径加强数据的安全性A:对不同用户授予不同的使用权.B:通过使用select子句限制用户对某些底层基表的列的访问C:通过使用where子句限制用户对某些底层基表的行的访问,对不同用户授予不同的权限。
数据库视图的设计与使用指南数据库视图是关系型数据库中的一个重要概念,它是一种虚拟的表,由一个或多个基本表的数据衍生而来。
视图可以根据需要组合、过滤和展示数据,提供了对数据的更灵活和高效的访问方式。
本文将介绍数据库视图的设计与使用指南,帮助读者更好地理解和应用数据库视图。
一、数据库视图的设计原则1. 明确视图的目的和用途:在设计和创建数据库视图之前,需要明确它的具体目的和用途。
视图可以用来过滤数据、简化操作、提供数据的特定视角等,设计视图之前需要清楚地定义它的用途。
2. 结构简单清晰:视图的结构应该尽量简单明了,不要包含过多的数据衍生和连结操作。
过于复杂的视图会增加数据库的负担,降低查询效率。
3. 数据完整性与一致性:数据库视图设计应遵循数据库的数据完整性原则,确保触发器、约束等机制能够有效地应用在视图的数据上。
此外,视图中的数据应该与基本表保持一致,及时更新和维护。
4. 命名规范与规则:为了方便管理和使用,数据库视图的命名应遵循一定的规范与规则。
可以采用清晰的命名方式,如"V_视图名"来区别于基本表,同时要避免使用过于复杂或冗长的视图名称。
5. 数据权限控制:视图可以用于限制用户对数据库的访问权限。
在设计视图时,需要考虑好不同用户角色的权限需求,合理控制他们对视图的访问与操作权限。
二、数据库视图的使用方法1. 查询数据:数据库视图最常见的用途就是查询数据。
通过创建视图来对用户开放特定的数据集,用户可以直接查询视图而不需要了解底层表的结构和关系。
视图还可以在查询时进行过滤和排序,提供更加方便和灵活的数据访问方式。
2. 简化操作:数据库中的视图可以对复杂的操作进行封装,简化用户的操作流程。
例如,可以通过创建一个视图,将多个表的数据联合展示,避免用户频繁地进行表连接操作。
3. 数据安全性:通过使用视图,可以保护敏感数据和确保数据的完整性。
通过限定视图中展示的数据字段和查询条件,可以有效地控制用户对数据的访问权限,防止用户越权查询和篡改数据。
实验六视图一、实验内容1.建立计算机科学与技术系的学生的视图View_Stu,并要求进行修改和插入操作时仍需保证该视图只有计算机科学与技术系的学生。
(做完之后在视图中添加一行,Sdept中随便写其他系,然后运行观看结果)2.建立计算机科学与技术系选修了数学分析且成绩在60分以上的学生的视图View_grade3.定义一个反映学生年份的视图4.将所有女生的学号以及他的平均成绩定义为一个视图5.删除第4题中的视图,并思考cascade的作用6.在第3题的视图中找出年龄小于25岁的学生7.在第4题中的视图查询平均成绩在70分以上的学生学号和平均成绩8.将第1题的视图View_Stu中学号为20040744009的姓名改为“刘晨”9.向View_Stu中插入一条新的学生记录,其中学号为20040744020,姓名为赵新,出生年月为1990-8-2310.删除View_Stu中学号为20040744020的记录(验证视图View_grade是否能更新。
思考视图在什么情况下不能更新)11.对每个同学找出他获得最高成绩的课程号、课程名以及相应的课程分数,并将查询结果作为VMgrade视图保存。
二、实验过程1.打开查询分析器,输入代码create view View_Stuasselect Sno,Sname,Sbirthfrom tStudentwhere Sdept='计算机科学与技术'with check option结果,创建成功在视图中添加一行,令Sname=‘丁欣雨‘,Sdept=‘通信工程’insertinto View_Stuvalues ('20040744020','丁欣雨','1990-8-7');结果提示错误:试图进行的插入或更新已失败,原因是目标视图或者目标视图所跨越的某一视图指定了WITH CHECK OPTION,而该操作的一个或多个结果行又不符合 CHECK OPTION 约束的条件。
数据库实验—视图定义与操作(1)定义“IS”系学⽣基本情况视图V_IS 并查询结果create view V_ISasselect Sno, Sname, Sage from S where Sdept ='IS';(2)将S,C,SC表中学⽣的学号,姓名,课程号,课程名,成绩定义为视图V_S_C_G并查询结果create view V_S_C_Gss select S.Sno, Sname, o, Cname, Gradefrom S, C,SC where S.Sno = SC.Sno and o = o;(3)将各系学⽣⼈数,平均年龄定义为视图V_NUM_AVG并查询结果create view V_NUM_AVGas select count(Sno) as NUM, avg(Sage) as AVGfrom S group by Sdept;(4)定义⼀个反映学⽣出⽣年份的视图V_YEAR并查询结果create view V_YEARas select (2020 – Sage) as YEAR from S;(5)将各位学⽣选修课程的门数及平均成绩定义为视图V_AVG_S_G并查询结果create view V_AVG_S_Gasselect count(Cno) as NUM, avg(Grade) as AVGfrom SC group by Sno;(6)将各门课程的选修⼈数及平均成绩定义为视图V_AVG_C_G并查询结果create view V_AVG_C_Gasselect Cno,count(Sno) as NUM,avg(Grade) as AVGfrom SC group by Cno;(7)查询平均成绩为90分以上的学⽣学号、姓名和成绩select Sno,Sname, Grade from V_S_C_Gwhere Sno inselect Sno from V_S_C_Ggroup by Snohaving avg(Grade) >=90;(8)查询各课成绩均⼤于平均成绩的学⽣学号、姓名、课程和成绩select*from V_S_C_Gwhere Sno in(select X.Sno from V_S_C_G Xwhere not exists(select Y.Grade from V_S_C_G Ywhere Grade <=(select avg(Grade) from V_S_C_G Zwhere (o = o) and (X.Sno = Y.Sno))));(9)按系统计各系平均成绩在80分以上的⼈数,结果按降序排列select Sdept,count(Sno) as NUM. from Swhere Sno in(select V_S_C_G.Sno from V_S_C_Ggroup by V_S_C_G.Snohaving avg(Grade)>=80)group by Sdept;(10)通过视图V_IS,分别将学号为“S1”和“S4”的学⽣姓名更改为“S1_MMM”,”S4_MMM”并查询结果update V_IS set Sname = ‘周芷若’ where Sno = ‘1’;update V_Is set Sname = ‘乔峰’ where Sno = ‘4’;select*from S;(11)通过视图V_IS,新增加⼀个学⽣记录 ('S12','YAN XI',19,'IS'),并查询结果insert into V_IS(Sno ,Sname, Sage,Sdept) values('S12', 'YAN XI', 19. 'IS')(12)通过视图V_IS,新增加⼀个学⽣记录 ('10','⽊婉清',19,'IS'),并查询结果insert into V_IS(Sno, Sname, Sage, Sdept)values('10','⽊婉清',19,'IS');select*from S;(13)通过视图V_IS,删除学号为“S12”和“S3”的学⽣信息,并查询结果delete from V_ISwhere Sno = ‘s12’ or Sno = ‘S3’(14)要通过视图V_S_C_G,将学号为“S12”的姓名改为“S12_MMM”,是否能实现?可以;update V_SC_G set Sname = ‘S12_MMM’where Sno = ‘S12’;(15)要通过视图V_AVG_S_G,将学号为“S1”的平均成绩改为90分,是否可以实现?不能实现。
数据库-视图(View)详解⼀、简介视图(View)可以看作定义在SQL Server上的虚拟表.视图正如其名字的含义⼀样,是另⼀种查看数据的⼊⼝.常规视图本⾝并不存储实际的数据,⽽仅仅存储⼀个Select语句和所涉及表的metadata。
视图简单理解如下:通过视图,客户端不再需要知道底层table的表结构及其之间的关系。
视图提供了⼀个统⼀访问数据的接⼝。
⼆、为什么要使⽤视图(View)从上⾯的图中,我们不难发现,使⽤视图将会得到如下好处:视图隐藏了底层的表结构,简化了数据访问操作因为隐藏了底层的表结构,所以⼤⼤加强了安全性,⽤户只能看到视图提供的数据使⽤视图,⽅便了权限管理,让⽤户对视图有权限⽽不是对底层表有权限进⼀步加强了安全性视图提供了⼀个⽤户访问的接⼝,当底层表改变后,改变视图的语句来进⾏适应,使已经建⽴在这个视图上客户端程序不受影响三、视图(View)的分类视图在SQL中可以分为三类1. 普通视图(Regular View)2. 索引视图(Indexed View)3. 分割视图(Partitioned View)下⾯从这⼏种视图类型来谈视图。
1)普通视图(Regular View)普通视图由⼀个Select语句所定义,视图仅仅包含其定义和被引⽤表的metadata.并不实际存储数据。
MSDN中创建视图的模版如下:CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ][ WITH <view_attribute> [ ,...n ] ]AS select_statement[ WITH CHECK OPTION ] [ ; ]<view_attribute> ::={[ ENCRYPTION ][ SCHEMABINDING ][ VIEW_METADATA ] }参数还是⽐较少的,现在解释⼀下上⾯的参数: ENCRYPTION:视图是加密的,如果选上这个选项,则⽆法修改.创建视图的时候需要将脚本保存,否则再也不能修改了 SCHEMABINDING:和底层引⽤到的表进⾏定义绑定。
数据库视图的基本概念及作⽤⼀、视图简介视图是从⼀个或⼏个基本表(或视图)中导出的虚拟的表。
在系统的数据字典中仅存放了视图的定义,不存放视图对应的数据。
视图是原始数据库数据的⼀种变换,是查看表中数据的另外⼀种⽅式。
可以将视图看成是⼀个移动的窗⼝,通过它可以看到感兴趣的数据。
视图是从⼀个或多个实际表中获得的,这些表的数据存放在数据库中。
那些⽤于产⽣视图的表叫做该视图的基表。
⼀个视图也可以从另⼀个视图中产⽣。
视图的定义存在数据库中,与此定义相关的数据并没有再存⼀份于数据库中。
通过视图看到的数据存放在基表中。
视图看上去⾮常像数据库的物理表,对它的操作同任何其它的表⼀样。
当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会⾃动反映在由基表产⽣的视图中。
由于逻辑上的原因,有些视图可以修改对应的基表,⽽有些则不能(仅仅能查询)。
⼆、视图的作⽤1.简化了操作,把经常使⽤的数据定义为视图我们在使⽤查询时,在很多时候我们要使⽤聚合函数,同时还要显⽰其它字段的信息,可能还会需要关联到其它表,这时写的语句可能会很长,如果这个动作频繁发⽣的话,我们可以创建视图,这以后,我们只需要select * from view就可以啦,这样很⽅便。
2.安全性,⽤户只能查询和修改能看到的数据。
因为视图是虚拟的,物理上是不存在的,只是存储了数据的集合,我们可以将基表中重要的字段信息,可以不通过视图给⽤户,视图是动态的数据的集合,数据是随着基表的更新⽽更新。
同时,⽤户对视图不可以随意的更改和删除,可以保证数据的安全性。
3.逻辑上的独⽴性,屏蔽了真实表的结构带来的影响。
视图可以使应⽤程序和数据库表在⼀定程度上独⽴。
如果没有视图,应⽤⼀定是建⽴在表上的。
有了视图之后,程序可以建⽴在视图之上,从⽽程序与数据库表被视图分割开来。
三、缺点1.性能差数据库必须把视图查询转化成对基本表的查询,如果这个视图是由⼀个复杂的多表查询所定义,那么,即使是视图的⼀个简单查询,数据库也要把它变成⼀个复杂的结合体,需要花费⼀定的时间。
数据库实验——视图的创建与使用数据库是一种利用计算机系统来管理、存储、处理数据的技术,视图则是在数据库中使用的一种技术。
视图是一种虚拟表,实际上并不存储数据,而是使用查询语句从一个或多个表中提取所需的数据。
在本次实验中,将学习视图的创建和使用。
一、实验目的1. 理解视图的概念和特点;2. 掌握视图的创建和使用方法;3. 熟悉视图的应用场景。
二、实验内容1. 视图的创建方法;2. 视图的使用方法;3. 视图的实际应用。
三、实验过程1. 视图的创建方法视图的创建方法如下:CREATE VIEW [视图名称] AS [查询语句];例如,要从学生表中提取所有学生的姓名和学号,则可以使用以下语句创建视图:CREATE VIEW student_info AS SELECT sname, sno FROM student;这样,就创建了一个名为student_info的视图,其中包含学生表中的姓名和学号两列数据。
2. 视图的使用方法创建视图之后,可以像使用普通表一样使用视图。
例如,可以使用SELECT语句来查询视图中的数据,如下所示:SELECT * FROM student_info;这样就可以查询出student_info视图中的所有数据。
3. 视图的实际应用视图在实际应用中有很多用途,例如:(1)简化查询语句当数据库中有较多的关联表时,查询语句会变得非常复杂。
此时,可以使用视图来简化查询语句。
例如,以下语句查询学生所在的班级名称:SELECT s.sname, ame FROM student s INNER JOIN class c ON s.classno = c.classno;使用视图后,查询语句可以变得更简洁:CREATE VIEW student_class AS SELECT s.sname, ame FROM student s INNER JOIN class c ON s.classno = c.classno;SELECT * FROM student_class;(2)保护数据安全例如,可以创建只包含学生姓名和学号的视图,而不包含其他敏感数据,以确保保护学生的隐私。
实验六:数据库视图的定义及使用
实验目的:
掌握视图的用法,加深对视图作用的理解。
实验内容:
1、创建、修改和删除视图。
2、利用视图进行查询。
实验步骤:
仅以命令方式来操作:
一、视图的创建:
1.创建信息系学生信息的视图:
create view IS_Student as select sno, sname, sage from student where sdept='IS'
2. 创建信息系选修了1号课程的学生的视图:
create view IS_S1 as select student.sno, cno, grade from student, sc where student.sno=sc.sno and sdept='IS' and cno='1'
3. 建立信息系选修了1号课程且成绩在90分以上的学生的视图:
create view IS_S2 as
select * from IS_S1 where grade>=90
4. 创建一个反映学生出生年份的视图:
create view BT_S(sno, sname, 出生年份) as
select sno, sname, year(GETDATE ())- sage from student
5. 将所有女生的记录定义为一个视图:
create view F_student as select * from student where ssex='女'
6. 将所有学生的学号和他的平均成绩定义为一个视图:
create view S_G(sno, avg_grade) as select sno,avg(grade) from sc group by sno
二、视图结构的修改:
6. 将视图F_student修改为信息系的所有女士的视图
alter view F_student as select * from student where ssex='女' and sdept='IS'
说明: 视图结构的修改的AS 后的Select语句与创建视图的完全一致, 引入结构修改的目的是为了避免与视图相关的数据库对象的变换, 如触发器, 关联等
三、查询视图
7. 在信息系的学生视图中查询年龄小于20岁的学生:
select * from IS_Student where sage<20
8. 查询信息系选修了1号课程的学生:
select sc.sno, sname from IS_Student, sc
where IS_Student.sno=sc.sno and cno= '1'
9. 在视图S_G中查询平均成绩在90分以上的学生的学号和平均成绩:
Select * from S_G where avg_grade >=90
四、更新视图:
10.将信息系学生视图IS_Student中学号为”95002”的学生姓名改为”刘辰”: update IS_Student set sname='刘辰' where sno='95002'
比较: update IS_Student set sname=’刘辰’ where sno=’95003’此语句不能实现数据的更新.
(为什么呢?因为在视图中并没有”95003”这条记录)
11. 向信息系学生视图IS_Student中插入一个新的学生记录, 学号为95029,姓名为”赵新”, 年龄为20岁:
insert into IS_Student values('95029', '赵新',20) (因为主表中其它属性字段可以为空,因此此操作能成功。
)
12. 删除信息系学生视图IS_Student中学号为95004的学生的记录:
delete from IS_Student where sno='95029'
五、删除视图:
13. 删除视图IS_S1:
drop view IS_S1
思考:
1.创建所有学生的基本信息和选课信息的视图
2.基于上述视图查询各系学生各门功课的平均成绩.
小结: (注意小结必须要写, 否则实验平时成绩相应会扣分数)。