数据库实验4

--1. 写出创建满足下述要求的视图的SQL语句,并执行所写代码。

--()包含学生的学号、姓名、所在系、年龄,课程号、课程名、课程学分的视图。

CREATE VIEW v1 AS SELECT Student.Sno,Sname,Sage,Sdept,SC.Cno,Cname,Credit

FROM student,SC,Course

WHERE Student.Sno=SC.Sno AND Course.Cno=SC.Cno

--()包含学生的学号、姓名、选修的课程名和考试成绩的视图。

CREATE VIEW v2 AS SELECT Student.Sno,Sname,Cname,SC.Grade

from Student,SC,Course

where Student.Sno=SC.Sno and sc.Cno=Course.Cno;

--()统计每个学生的选课门数,要求列出学生学号和选课门数的视图。

create view v3 as select Sno '学号', COUNT(Cno) '选课门数' from SC group by Sno;

--()统计每个学生的修课总学分,要求列出学生学号和总学分的视图(说明:考试成绩大于等于才可获得此门课程的学分)。

m

create view v4 as select SC.Sno, sum(Credit) '总学分' from SC,Course Where SC.Cno=Course.Cno and Grade >=60 group by Sno

 

--2.  利用第题建立的视图,完成如下查询。

--()查询考试成绩大于等于分的学生的姓名、课程名和成绩。

select Sno,Cname,Grade from v2 where Grade >= 90;

--()查询选课门数超过门的学生的学号和选课门数。

select 学号,选课门数 from v3 where 选课门数>3;

--()查询计算机系选课门数超过门的学生的姓名和选课门数。

select Sname,选课门数 FROM Student,v3 WHERE v3.学号=Student.Sno AND Sdept='计算机系' AND 选课门数>3

--()查询修课总学分超过分的学生的学号、姓名、所在系和修课总学分。

select Student.Sno,Sname,Sdept,总学分 from v4,Student where Student.Sno=v4.Sno and 总学分>10

--()查询年龄大于等于岁的学生中,修课总学分超过分的学生的姓名、年龄、所在系和修课总学分。

select Sname,Sage,Sdept,总学分 from v4,Student where Sage>20 and Student.Sno=v4.Sno and v4.总学分>10;

 

 

--使用WITH CHECK OPTION,在第题建立的视图()的基础上,

--再创建一个计算机系同学的学号、姓名、所在系、年龄,课程号、课程名、课程学分的视图。

create view v5 as select Student.Sno,Sname,Sdept,Sage,SC.Cno,Cname,Credit

from Student,SC,Course

where Sdept='计算机系' and Student.Sno=SC.Sno and SC.Cno= Course.Cno with check option;

--()增加一条记录,

--0841101  ?  张新  ? 计算机系  ? 20    C001    高等数学  ? 4

INSERT INTO v5 VALUES(0841101,'张新','计算机系',20,'C001','高等数学',4);

--()修改这条记录为

--0841101  ?  张新  ? 物理系  ? 20    C001    高等数学  ? 4

update  v5 set Sdept='物理系'  where Sno='0841101';

--以上两个操作是否能够实现?为什么?可以实现的,写出SQL语句。

第一条语句不能实现因为他会涉及到多张表的值

 

--4.以下操作能否实现,如果能实现,给出相应的SQL语句,否则,解释不能实现的原因。

--()对Student表,创建一个只包含男生信息的视图。对此视图执行将李勇的年龄更新为岁。

CREATE view v6 as select * FROM Student where Sex='';

UPDATE v6 SET Sage = 22 WHERE Sname = '李勇'

--()在上题创建的视图中。删除刘晨同学的记录。

DELETE from v6 WHERE Sname = '刘晨'

--DELETE 语句与REFERENCE 约束"FK__SC__Sno__0BC6C43E"冲突。该冲突发生于数据库"学生数据库",表"dbo.SC", column 'Sno'

--()第题建立的计算机系同学的视图,对此视图执行将李勇的年龄更新为岁。

UPDATE v5 SET Sage=22 WHERE Sname='李勇'

--()第题建立的计算机系同学的视图,对此视图执行删除刘晨同学的记录。

DELETE from v5 WHERE Sname = '刘晨'

--视图或函数'v5' 不可更新,因为修改会影响多个基表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值