已知有三个表:学生表(学号,姓名,性别,年龄,院系号,入学成绩) 
课程表(课程号,课程名,学分,先修课) 
成绩表(学号,课程号,成绩) 
    1、查询选修了“数据结构”或者“网络工程”课程的学生学号,课程号,成绩 
    2、查询院系号为“06”的选修了“数据结构”课程的学生学号,姓名,性别 
    3、查询年龄最大的学生信息 
    4、查询“06”或者“02”院系的学生学号,课程号和所选课程的成绩,按课程号降序排列,课程号相同的按学号升序排列 
    5、在学生表中插入一条新记录,学号为“s9”,姓名为“张英”,年龄18,性别女,院系号为“01” 
    6、删除所有先修课程为空的课程记录 
    7、更新所有选修了“C++”课程的同学这门课的成绩,提高5分 
    8、查询选修了两门课程以上的同学的所选课程数、平均分、最高分、最低分 

解决方案 »

  1.   

    1.
    select a.学号,c.课程号,b.成绩
    from 学生表 as a
        join 成绩表 as b
    on a.学号=b.学号
        join 课程表 as c
    on b.课程号=c.课程号
    where c.课程名 in('数据结构','网络工程');2.
    select a.*
    from 学生表 as a
    where exists(select * from 成绩表 as b
                      join 课程表 as c
                 on b.课程号=c.课程号 
                 where a.学号=b.学号 and c.课程名='数据结构')
        and 院系号='06';3.
    select top 1 with ties * from 学生表 order by 年龄 desc;4.
    select a.学号,c.课程号,c,课程名,b.成绩
    from 学生表 as a
        join 成绩表 as b
    on a.学号=b.学号
        join 课程表 as c
    on b.课程号=c.课程号
    where a.院系号 in('06','02')
    order by c.课程号 desc,a.学号;5.
    insert 学生表(学号,姓名,年龄,性别,院系号) values('s9','张英',18,'女','01');6.
    delete 课程表 where 先修课程 is null;7.
    update a set
        成绩=成绩_5
    from 成绩表 as a
        join 课程表 as b
    on a.课程号=b.课程号
    where b.课程名='C++';8.
    select a.学号,avg(b.成绩) as 平均分,max(b.成绩) as 最高分,min(b.成绩) as 最低分
    from 学生表 as a
        join 成绩表 as b
    on a.学号=b.学号
    group by a.学号
    having count(distinct b.课程号)>2