
学生-课程数据库-初始sql语句(7)(注释版)
例题3.90:将Student表中所有女生记录定义为一个视图。
发布日期:2021-05-07 03:02:57
浏览次数:21
分类:精选文章
本文共 3802 字,大约阅读时间需要 12 分钟。
重点归纳:
dbo:data base owner(数据库拥有者) 1、删除视图语句格式: drop view <视图名> [cascade] 2、查询、更新(插入insert、删除delete、修改update)视图语句格式与对基本表操作的语句格式一样。 3、行列子集视图(单表视图) 4、where子句中不能出现聚集函数。 5、由于视图是不实际存储数据的虚表,因此对视图的更新最终要转换成对基本表的更新。 6、在关系数据库中,并不是所有的视图都是可更新的,因为有些视图的更新不能唯一地有意义地转换成对相应基本表的更新。 7、一般,行列子集视图(单表视图)是可更新的。 8、视图最主要的作用是安全性。/*建立信息系学生的视图(单表视图)*/create view IS_Studentasselect sno,sname,sagefrom studentwhere sdept='IS'/*建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生(单表视图)*/create view IS_Student2asselect sno,sname,sagefrom studentwhere sdept='IS'with check option--检查选项(检查where条件)--with check option表示对视图进行update、insert和delete操作时要--保证更新、插入或删除的行满足视图定义中的谓词条件/*建立信息系选修了1号课程的学生的视图(包括学号、姓名、成绩)(多表视图)*/create view IS_S1asselect sc.sno,sname,gradefrom student,scwhere student.sno=sc.sno and sdept='IS' and cno=1/*建立信息系选修了1号课程且成绩在90分以上的学生的视图(01、建立在已定义好的视图上)*/create view IS_S2asselect sno,sname,gradefrom IS_S1where grade>90/*建立信息系选修了1号课程且成绩在90分以上的学生的视图(02、多表视图)*/create view IS_S2asselect sc.sno,sname,gradefrom student,scwhere student.sno=sc.sno and cno=1 and grade>90/*定义一个反映学生出生年份的视图(01、带表达式的视图)*/create view BT_Sasselect sno,sname,2021-sage 出生年龄 from student/*定义一个反映学生出生年份的视图(02、带表达式的视图)*/create view BT_S(sno,sname,出生年龄)asselect sno,sname,2021-sagefrom student/*将学生的学号及平均成绩定义为一个视图(分组视图)*/create view S_Gasselect sno,AVG(grade) 平均成绩from scgroup by sno/*将Student表中所有女生记录定义为一个视图*/create view F_Studentasselect *from studentwhere ssex='女'/*在信息系学生的视图中找出年龄小于20岁的学生(01、查询视图)*/select sno,sagefrom IS_Studentwhere sage<20/*在信息系学生的视图中找出年龄小于20岁的学生(02、视图消解)*/select sno,sagefrom studentwhere sdept='IS' and sage<20/*查询选修了1号课程的信息系学生*/select sc.sno,snamefrom IS_Student,scwhere IS_Student.sno=sc.sno and cno=1/*在S_G视图中查询平均成绩在90分以上的学生学号和平均成绩(01)*/select *from S_Gwhere 平均成绩>90/*在S_G视图中查询平均成绩在90分以上的学生学号和平均成绩(02)*/select sno,AVG(grade)平均成绩from scgroup by snohaving AVG(grade)>90--where子句中是不能用聚集函数作为条件表达式的。--由于视图是不实际存储数据的虚表,因此对视图的更新最终要转换为对基本表的更新/*将信息系学生视图IS_Student中学号为“201215122”的学生姓名改为“刘辰”(01)*/update IS_Studentset sname='刘辰'where sno=201215122/*将信息系学生视图IS_Student中学号为“201215122”的学生姓名改为“刘辰”(02、转换为对基本表的更新)*/update studentset sname='刘辰'where sno=201215122 and sdept='IS'/*向信息系学生视图IS_Student中插入一个新的学生记录,其中学号为“201215129”,姓名为“赵新”,年龄为20岁(01)*/insert into IS_Studentvalues(201215129,'赵新',20)/*向信息系学生视图IS_Student中插入一个新的学生记录,其中学号为“201215129”,姓名为“赵新”,年龄为20岁(02、转换为对基本表的更新)*/insertinto student(sno,sname,sage,sdept)values(201215129,'赵新',20,'IS')/*create view IS_Student2asselect sno,sname,sagefrom studentwhere sdept='IS'with check optioninsertinto IS_Student2values(201215129,'赵新',20)插入失败原因:试图进行的插入或更新已失败,原因是目标视图或者目标视图所跨越的某一视图指定了 WITH CHECK OPTION,而该操作的一个或多个结果行又不符合 CHECK OPTION 约束。*/create view IS_Student22asselect sno,sname,sage,sdeptfrom studentwhere sdept='IS'with check optioninsertinto IS_Student22values(201215129,'赵新',20,'IS')/*删除信息系学生视图IS_Student中学号为“201215129”的记录(01)*/deleteIS_Studentwhere sno=201215129/*删除信息系学生视图IS_Student中学号为“201215129”的记录(02、转换为对基本表的更新)*/deletestudentwhere sdept='IS' and sno=201215129/*在关系数据库中,并不是所有的视图都是可更新的,因为有些视图的更新不能唯一地有意义地转换成对相应基本表的更新。如:create view S_Gasselect sno,AVG(grade) 平均成绩from scgroup by snoupdate S_Gset 平均成绩=90where sno=201215121错因:系统无法修改各科成绩,以使平均成绩成为90,所以S_G视图是不可更新的。一般地,行列子集视图(单表视图)是可更新的。*//*对每个同学找出他获得最高成绩的课程号(01)*/create view VMGRADEasselect sno,MAX(grade) Mgradefrom scgroup by snoselect sc.sno,cno,gradefrom sc,VMGRADEwhere sc.sno=VMGRADE.sno and grade=Mgrade/*对每个同学找出他获得最高成绩的课程号(02、相关子查询)*/select *from sc xwhere grade=(select MAX(grade) from sc where sno=x.sno ) /*删除视图BT_S和视图IS_S1*/drop view BT_Sdrop view IS_S1 /*--删除视图IS_S1视图和由它导出的所有视图drop view IS_S1 cascade --sqlserver2008视图级联删除加cascade会报错。*/————————————————————————————————————————————————————————————————————更新于2021.4.20
附:界面创建视图(2题)
例题3.89:将学生的学号及平均成绩定义为一个视图。

发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年03月22日 08时57分59秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
多媒体文件格式全解说(下)--图片
2019-03-06
淘宝WAP版小BUG分析
2019-03-06
NodeJS+Express+MongoDB
2019-03-06
(四十四)c#Winform自定义控件-水波-HZHControls
2019-03-06
c#winform主题实现的一个方法
2019-03-06
asp.net打印网页后自动关闭网页【无需插件】
2019-03-06
一个人开发的html整站源码分享网站就这么上线了
2019-03-06
SQLServer 查看耗时较多的SQL语句(转)
2019-03-06
【计算机网络】应用层
2019-03-06
【Maven】POM基本概念
2019-03-06
【Java思考】Java 中的实参与形参之间的传递到底是值传递还是引用传递呢?
2019-03-06
【设计模式】单例模式
2019-03-06
【SpringCloud】Hystrix熔断器
2019-03-06
【Linux】2.3 Linux目录结构
2019-03-06
java.util.Optional学习笔记
2019-03-06
远程触发Jenkins的Pipeline任务的并发问题处理
2019-03-06
jackson学习之七:常用Field注解
2019-03-06
jackson学习之八:常用方法注解
2019-03-06
Web应用程序并发问题处理的一点小经验
2019-03-06
entity framework core在独立类库下执行迁移操作
2019-03-06