有关系模式:学生(学号,姓名,性别,年龄,所在系),课程(课程号,课程名,课程学分),选修(学号,课程号,成绩),反映的是学生和课程之间的多对多关系,
1\请用SQL语句完成下列任务将课程名为“C语言”的选修记录全部删除
2、查询“计算机系”中选修过课程的学生学号,姓名和性别
3、创建一试图“系与成绩”,要求将各系的学生平均成绩分别列示
4、查询各课程学生的平均成绩,用奖序显示
5、查询平均成绩最高的课程及其平均学生成绩
6、把视图“系与成绩”的所有权限授予给所有用户

解决方案 »

  1.   

    先贴部分delete  from 选修 where 课程号=(select 课程号 from 课程 where 课程名='C语言')
    select 学号,姓名,性别 from 选修 where 学号 in (select 学号 from 学生 where 所在系='计算机系' and 学号 in (select distinct 学号 from 选修))
      

  2.   

    1.delete 选修 where 课程号 in (select 课程号 from 课程 where 课程名='C语言')
    2.select 学号,姓名,性别 from 学生 where 所在系='计算机系' and 学号 
       in (select 学号 from 选修)
    3.create view 系与成绩 as select 所在系,avg(成绩) 成绩
      from 学生 a,选修 b where a.学号=b.学号 
      group by 所在系
    4. select b.课程名,avg(成绩) 
       from 选修 a,课程 b where a.课程号=b.课程号 
       group by b.课程名 order by 2 desc
    5. select top 1 b.课程名,avg(成绩) 
       from 选修 a,课程 b where a.课程号=b.课程号 
       group by b.课程名 order by 2 desc
    6. grant all on 系与成绩 to public  
      

  3.   

    1
    delete 选修 from 选修 a join 课程 b on a.课程号=b.课程号 where b.课程名='C语言'2
    select distinct a.学号,a.姓名,a.性别 from 学生 a join 选修 b on a.学号=b.学号 where a.所在系='计算机系'
    -- OR
    select a.学号,a.姓名,a.性别 from 学生 a join 选修 b on a.学号=b.学号 where a.所在系='计算机系' group by a.学号,a.姓名,a.性别3
    create view 系与成绩
    as
    select a.所在系,平均成绩=avg(b.成绩) from 学生 a join 选修 b on a.学号=b.学号 group by a.所在系4
    select a.课程,平均成绩=avg(b.成绩) from 课程 a join 选修 b on a.课程号=b.课程号 group by a.课程 order by avg(b.成绩) desc5
    select top 1 a.课程,平均成绩=avg(b.成绩) from 课程 a join 选修 b on a.课程号=b.课程号 group by a.课程 order by avg(b.成绩) desc6
    grant all on 系与成绩 to public
      

  4.   

    第二个有问题,改动一下顺便贴上第三个select 学生.学号,姓名 
    from 选修,学生 
    where 学生.学号 in (select 学号 from 学生 where 所在系='计算机系' and 学号 in (select distinct 学号 from 选修)) and 学生.学号=选修.学号select 所在系,sum(分数)/count(*) as 平均分 from 学生,选修 where 学生.学号=选修.学号 group by 所在系