这是第二题的题目,下面还有三四两题,就不附上了
-- (1)建立一个包含 00311 班学生记录的视图 S00311,
-- 并要求对该视图插删改操作时只能对该班的学生进行。
create view S00311
as select * from student
where clno = '00311'
with check option;
-- (2)建立一个包含所有学生 Sno,Sname,Clno,Cname 和 Grade 字段的视图 Grades。
create view Grades
as select student.sno,sname,clno,cname,Grade
from student,cj,course
where student.sno = cj.sno and cj.cno = course.cno;
-- (3)建立 00311 班选修了 2 号课程学生的成绩视图 Cj2_00311
create view Cj2_00311
as select cj.sno,cno,grade
from student,cj
where student.sno = cj.sno and cno = '2' and clno = '00311';
-- (4)在视图 S00311 上建立能反映出生日期的 00311 班班女学生视图S00311_1
create view S00311_1(sno,sname,birthday)
as select sno,sname,year(getdate()-sage)
from S00311
where ssex = '女';
-- (5)建立一个反映各门课程平均成绩的视图 C_avg。
create view C_avg(cno,avg_grade)
as select cno,avg(grade)
from cj
group by cno;
-- (6)使用 select * from 视图名 对上述各视图进行简单查询
select * from S00311;
select* from S00311_1;
-- (7)在 S00311 视图中查询 00311 班年龄不大于 20 的女生人数
select * from S00311
where ssex = '女' and sage <= 20;
-- (8)在 Grades 视图中查询‘数据库’考 90 分以上的学生姓名和班级
select sname,clno
from Grades
where cname='数据库' and grade > 90;
-- (9)在 C_avg 视图中查询平均成绩不及格的课程。
select cno from C_avg
where avg_grade < 60;
-- (10)在 00311 班学生视图 S00311 中
/* ①插入新学生记录(2000108,刘辉,男,00311)
和(2000109,张强东,男,00312)。*/
insert into S00311(sno,sname,ssex,clno)
values ('2000108','刘辉','男','00311');
insert into S00311(sno,sname,ssex,clno)
values ('2000109','张强东','男','00312');
-- ②将学号为:“2001108”的学生班级从‘00311’改为‘00312’
update S00311
set clno = '00312'
where sno = '2001108';
-- ③从 S00311 中将学号为“2000104”的记录删除。
delete from S00311
where sno = '2000104';
-- (11)通过 Cj2_00311 视图给 00311 班选修了 2 号课程的学生每人加5 分
update Cj2_00311
set grade += 5
where cno = '2' ;
--(12)在 C_avg 视图中将 2 号课程平均成绩减 5 分。
update C_avg
set avg_grade -= 5
where cno = '2';
-- (13)删除 C_avg 视图。
drop view C_avg;
-- (14)删除 S00311 视图后,并再次对视图 Cj2_00311 和 S00311_1 进行查询
drop view S00311;
select * from Cj2_00311;
select * from S00311_1;
代码没有问题,运行报错仔细看其消息提示。