数据库实验三、数据库的视图及应用

(1)建立软件学院学生的视图:rj_student。视图中包括:学号、姓名、年龄、学院。

(2)利用第1题所建立的视图:rj_student查出年龄小于20岁的软件学院的学生信息,查询结果中包括:学号、姓名、性别、学院等4个属性;写出与上述利用视图的查询等价的利用基本表student的查询语句,并验证上述两个查询的等效性。

(3)建立一个学生出生年份的视图:bt_s,视图中包括:学号、姓名、出生年份,以当前的年份为参照。

(4)建立一个显示各门课程中最高成绩的视图: max_grade_1,视图中包括:课程号,学生号,成绩(即对应课程的最高成绩)。

(5)建立一个显示各门课程中最高成绩的视图: max_grade_2,视图中包括:课程号,课程名,学生号,学生名,学院,成绩(即对应课程的最高成绩)。

(6)建立一个学生平均成绩的视图:S_G,视图中包括:学号(sno) 和 平均成绩(Gavg);并尝试利用update语句对视图S_G中的第1条记录中的平均成绩(Gavg)更新为:95,看看是否能成功,并分析原因,把你的分析写入实验报告中。

(7)建立学生平均成绩的视图:avg_cj;视图中包括:学号(avg_sno)、姓名(avg_sname)、学院(avg_sdept)及其平均成绩(avg_grade),且视图中只包含平均成绩>=90的记录。

    (8)利用第7题建立的视图:avg_cj结合SC基本表,查询出每个学生所选的课程中超过该生所有课程平均成绩的课程(比如某学生选了3门课程,3门课程的平均成绩是89,结果中要求把3门课程中超过89分的课程)。查询结果中包括:学号、姓名、课程号、成绩。

(1)建立软件学院学生的视图:rj_student。视图中包括:学号、姓名、年龄、学院。

create view rj_student
AS
select sno,sname,sage
from student
where sdept='软件学院'
With check option ;

(2)利用第1题所建立的视图:rj_student查出年龄小于20岁的软件学院的学生信息,查询结果中包括:学号、姓名、性别、学院等4个属性;写出与上述利用视图的查询等价的利用基本表student的查询语句,并验证上述两个查询的等效性。

create view rj_student
AS
select sno,sname,sage,sdept
from student
where sage<20 and sdept='软件学院';

(3)建立一个学生出生年份的视图:bt_s,视图中包括:学号、姓名、出生年份,以当前的年份为参照。

create view bt_s(sno,sname,sbirth)
AS
select sno,sname,2022-sage
from student;

(4)建立一个显示各门课程中最高成绩的视图: max_grade_1,视图中包括:课程号,学生号,成绩(即对应课程的最高成绩)。

create view max_grade_1
AS
select cno,sno,max(grade)
from sc
group by cno;

(5)建立一个显示各门课程中最高成绩的视图: max_grade_2,视图中包括:课程号,课程名,学生号,学生名,学院,成绩(即对应课程的最高成绩)。

create view max_grade_2
as
select sc.cno,cname,sc.sno,sname,sdept,max(grade)
from sc,student,course
where sc.sno=student.sno and sc.cno=course.cno
group by cno;

(6)建立一个学生平均成绩的视图:S_G,视图中包括:学号(sno) 和 平均成绩(Gavg);并尝试利用update语句对视图S_G中的第1条记录中的平均成绩(Gavg)更新为:95,看看是否能成功,并分析原因,把你的分析写入实验报告中。

CREATE view S_G
as
SELECT sno,AVG(grade) Gavg
FROM sc
GROUP BY sno
HAVING AVG(grade)
update view S_G(sno,Gavg)
set Gavg=95
where sno='201215121';

(7)建立学生平均成绩的视图:avg_cj;视图中包括:学号(avg_sno)、姓名(avg_sname)、学院(avg_sdept)及其平均成绩(avg_grade),且视图中只包含平均成绩>=90的记录。

create view avg_cj(avg_sno,avg_sname,avg_sdept,avg_grade)
as
select sc.sno,sname,sdept,avg(grade)
from student,sc
where sc.sno=student.sno
group by sc.sno;

(8)利用第7题建立的视图:avg_cj结合SC基本表,查询出每个学生所选的课程中超过该生所有课程平均成绩的课程(比如某学生选了3门课程,3门课程的平均成绩是89,结果中要求把3门课程中超过89分的课程)。查询结果中包括:学号、姓名、课程号、成绩。

select avg_cj.avg_sno,sname,cno,grade
from student,sc,avg_cj
where sc.sno=student.sno and student.sno=avg_cj.avg_sno and grade>avg_grade;
  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vijurria

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值