假设有一个学生-课程数据库S-T,该数据库中有三个表,它们的定义如下:
学生表:Sudent(Sno,Sname,Ssex,Sage,Sdept)
各属性分别表示学生的学号、姓名、性别、年龄和系别。
课程表:Course(Cno,Cname,Cpno,Ccredit)
各属性分别表示课程号、课程名、先行课号和学分。
学生选课表:SC(Sno,Cno,Grade)
各属性分别表示学号、课程号和成绩。
用SQL语言完成以下各操作:
- 创建SC表,并分别定义主键约束、外键约束,并在Grade列上定义核查约束,限定成绩的取值只能为0-100。
create table SC ( Sno char(9) foreign key reference Student(Sno), Cno char(4) foreign key reference Course(Cno), Grade int check(Grade between 0 and 100), primary key (Sno, Cno) )
- 查询“CS”系所有年龄在20岁以下的学生的学号、姓名及年龄。
select Sno,Sname,Sage from student where Sage<20 and Sdept='CS'
- 查询姓“张”的学生的学号、姓名、性别、年龄。
select Sno,Sname,Ssex,Sage from student where Sname like '[张%]'
- 求每门课程的最高成绩和平均成绩,要求显示出课程号、最高成绩和平均成绩。
select Cno, MAX Grade, AVG Grade from SC group by Cno
- 查询既选修了1号课程又选修了2号课程的学生学号。
select Sno from SC where Cno='1' and Sno in ( select Sno from SC where Cno='2' )
- 查询选修了“数学”这门课程的学生学号、姓名及成绩。
select a.Sno,Sname,Grade from Student a, Course b, SC c where a.Sno=c.Sno and b.Cno=c.Cno and b.Cname='数学'
- 给所有“IS”系学生的选课成绩增加5分。
update SC,Student set SC.Grade += 5 where SC.Sno=Student.Sno and Student.Sdept='IS'
update SC set Grade+=5 where Sno in ( select Sno from Student where Sdept='IS' )
- 建立一视图,该视图包含CS系中选修了2号课程的学生的学号,姓名及成绩。
create view CS_S1 as select a.Sno, a.Sname, Grade from Student a, SC b where s.Sno=b.Sno and b.cno=2 and a.Sdept='CS'