在“学生管理数据库”中建立四张表,分别如下:
学生表:(主键:学号)
学号 姓名 性别 年龄 所在院系 班级 入学日期
20009001 葛文卿 女 22 国际贸易 国贸2班 2000-8-29
20014019 郑秀丽 女 21 会计学 会计1班 2001-9-2
20023001 刘成铠 男 18 计算机 软件2班 2002-8-27
20026002 李涛 女 19 电子学 电子1班 2002-8-27
20023002 沈香娜 女 18 计算机 软件2班 2002-8-27
20026003 李涛 男 19 计算机 软件1班 2002-8-27
20023003 肖一竹 女 19 计算机 软件2班 2002-8-27课程表:(主键:课程号)
课程号 课程名 先修课 学分
C801 高等数学 4
C802 C++语言 C807 3
C803 数据结构 C802 4
C804 数据库原理 C803 4
C805 操作系统 C807 4
C806 编译原理 C803 4
C807 离散数学 4成绩表:(主键:学号、课程号)
学号 课程号 成绩 学分
20023001 C801 98 4
20023002 C804 70 4
20026001 C801 85 4
20023001 C802 99 3
20026002 C803 82 4授课表:(主键:课程号、班级名)
教师名 课程号 学时数 班级名
苏亚步 C801 72 软件2班
王文山 C802 64 软件2班
张珊 C803 72 软件2班
王文山 C804 64 软件2班
苏亚步 C801 72 软件1班(1)列出软件2班女同学的名单
(2)列出2002年元旦前注册的学生名单
(3)列出所有年龄在19岁以下,或者女同学的名单
(4)列出没有先修课的课程名
(5)列出既不是“电子系”,也不是“会计系”的学生的学号、姓名和所在院系
(6)查询选修“C801”课程的学生的最高分
(7)统计男、女学生各自的人数和平均年龄
(8)列出选修了一门以上课程的学生学号,及其选修门数
(9)查询“沈香娜”同学所在班级的所有学生的学号和姓名
(10)统计每一年龄选修课程的学生人数难题:
1) 在基本表“成绩表”中检索平均成绩最高的学生学号
2) 求表S中男同学的每一年龄组(超过2人)有多少人?要求查询结果按人数升序排列,人数相同按年龄降序排列。
3) 列出选修了全部课程的学生学号和姓名
4) 查询这样的学生,该生至少选修了学生20026001所选修的全部课程

解决方案 »

  1.   

    成绩表:(主键:学号、课程号) 
    学号 课程号 成绩 学分 
    20023001 C801 98 4 
    20023002 C804 70 4 
    20026001 C801 85 4 
    20023001 C802 99 3 
    20026002 C803 82 4 
    select top 1 学号 ,avg( 成绩)
    from 成绩表
    group by 学号
    order by avg( 成绩) desc
      

  2.   

    (1)列出软件2班女同学的名单学生表:(主键:学号) 
    学号 姓名 性别 年龄 所在院系 班级 入学日期 
    20009001 葛文卿 女 22 国际贸易 国贸2班 2000-8-29 
    20014019 郑秀丽 女 21 会计学 会计1班 2001-9-2 
    20023001 刘成铠 男 18 计算机 软件2班 2002-8-27 
    20026002 李涛 女 19 电子学 电子1班 2002-8-27 
    20023002 沈香娜 女 18 计算机 软件2班 2002-8-27 
    20026003 李涛 男 19 计算机 软件1班 2002-8-27 
    20023003 肖一竹 女 19 计算机 软件2班 2002-8-27select  *
    from 学生表
    where 班级 = '软件2班' and 性别 = '女'
      

  3.   

    (2)列出2002年元旦前注册的学生名单学生表:(主键:学号) 
    学号 姓名 性别 年龄 所在院系 班级 入学日期 
    20009001 葛文卿 女 22 国际贸易 国贸2班 2000-8-29 
    20014019 郑秀丽 女 21 会计学 会计1班 2001-9-2 
    20023001 刘成铠 男 18 计算机 软件2班 2002-8-27 
    20026002 李涛 女 19 电子学 电子1班 2002-8-27 
    20023002 沈香娜 女 18 计算机 软件2班 2002-8-27 
    20026003 李涛 男 19 计算机 软件1班 2002-8-27 
    20023003 肖一竹 女 19 计算机 软件2班 2002-8-27 
    ---
    select *
    from 学生表
    where 入学日期 < '2002-1-1'
      

  4.   

    (3)列出所有年龄在19岁以下,或者女同学的名单 
    学生表:(主键:学号)   
    学号   姓名   性别   年龄   所在院系   班级   入学日期   
    20009001   葛文卿   女   22   国际贸易   国贸2班   2000-8-29   
    20014019   郑秀丽   女   21   会计学   会计1班   2001-9-2   
    20023001   刘成铠   男   18   计算机   软件2班   2002-8-27   
    20026002   李涛   女   19   电子学   电子1班   2002-8-27   
    20023002   沈香娜   女   18   计算机   软件2班   2002-8-27   
    20026003   李涛   男   19   计算机   软件1班   2002-8-27   
    20023003   肖一竹   女   19   计算机   软件2班   2002-8-27 ------------select *
    from table
    where  年龄 < 19 or 性别 = '女'
      

  5.   

    1) 在基本表“成绩表”中检索平均成绩最高的学生学号 
    成绩表:(主键:学号、课程号)   
    学号   课程号   成绩   学分   
    20023001   C801   98   4   
    20023002   C804   70   4   
    20026001   C801   85   4   
    20023001   C802   99   3   
    20026002   C803   82   4   select top 1 学号 ,avg( 成绩)
    from 成绩表
    group by 学号
    order by avg( 成绩) desc
      

  6.   

    1) 在基本表“成绩表”中检索平均成绩最高的学生学号 
          max(avg(.)) 
    2) 求表S中男同学的每一年龄组(超过2人)有多少人?要求查询结果按人数升序排列,人数相同按年龄降序排列。 
          ...group by age ...having count(*) > 1 order by xx asc,age
    3) 列出选修了全部课程的学生学号和姓名 
          left join ... where  is null
    4) 查询这样的学生,该生至少选修了学生20026001所选修的全部课程 
          select distinct ..(select 课程号 from .) a right join (select..where = '2002..') b on a.课程号 = b.课程号 
      

  7.   

    4 还要加group by id having count(*) = 全部课程数
      

  8.   

    select * from 学生表 where 班级='软件2班' and 性别='女'
    --
    select * from 学生表 where 入学日期!>'2002-01-01'
    --select * from 学生表 where 年龄<19--
    select * from 课程表 a where not exists(select 1 from 授课表 where 课程号=a.课程号)--select * from 学生表 where 所在院系 not in('电子系','会计系')
    -
    select * 
    from  学生表  a 
    where 学号 in
     (select  学号 from 成绩表 b
    where 课程号='C801' and 成绩=(select max(成绩) from 成绩表 where 课程号=b.课程号))select 
    女学生=(case when 性别='女' then 1 else 0 end),
    男学生=(case when 性别='男' then 1 else 0 end),
    女avg=(select avg(年龄) from 学生表  where 性别='女'),
    男avg=(select avg(年龄) from 学生表  where 性别='男')
    from 
    学生表 
    ----------select 
    a.学号,a.姓名,
    count(1) as '选修门数 '
    from 
    学生表 a
    join
    成绩表 b on a.学号=b.学号
    group by a.学号,a.姓名
    select 
    *
    from 
    学生表 awhere
    班级=(select 班级 from 学生表 where 姓名='沈香娜')select
    a.年龄,count(1) as '选修课程学生人数'
    from 
    学生表 a
    join
    成绩表 b on a.学号=b.学号
      

  9.   

    select
    a.年龄,count(1) as '选修课程学生人数'
    from 
    学生表 a
    join
    成绩表 b on a.学号=b.学号
    group by a.年龄
      

  10.   

    select top 1 Sno ,avg(Grade)
    from GRADE
    group by Sno