假设有一个学生-课程数据库S-T,该数据库中有三个表,它们的定义如下:
学生表:Sudent(Sno,Sname,Ssex,Sage,Sdept)
各属性分别表示学生的学号、姓名、性别、年龄和系别。
课程表:Course(Cno,Cname,Cpno,Ccredit)
各属性分别表示课程号、课程名、先行课号和学分。
学生选课表:SC(Sno,Cno,Grade)
各属性分别表示学号、课程号和成绩。
用SQL语言完成以下各操作:

  1. 创建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)
)
  1. 查询“CS”系所有年龄在20岁以下的学生的学号、姓名及年龄。
select Sno,Sname,Sage
from student
where Sage<20 and Sdept='CS'
  1. 查询姓“张”的学生的学号、姓名、性别、年龄。
select Sno,Sname,Ssex,Sage
from student
where Sname like '[张%]'
  1. 求每门课程的最高成绩和平均成绩,要求显示出课程号、最高成绩和平均成绩。
select Cno, MAX Grade, AVG Grade
from SC
group by Cno
  1. 查询既选修了1号课程又选修了2号课程的学生学号。
select Sno
from SC
where Cno='1' and Sno in (
select Sno from SC where Cno='2'
)
  1. 查询选修了“数学”这门课程的学生学号、姓名及成绩。
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='数学' 
  1. 给所有“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'
)
  1. 建立一视图,该视图包含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'