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

(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;

你可能感兴趣的:(数据库,database,sql)