学生表
学号 姓名 性别 生日 班级编号
101 李军 男 1976-2-20 0:00 95033
103 陆君 男 1974-6-3 0:00 95031
105 匡明 男 1975-10-2 0:00 95031
107 王丽 女 1976-1-23 0:00 95033
108 曾华 男 1977-9-1 0:00 95033
109 王芳 女 1975-2-10 0:00 95031
110 刘华 女 1976-1-23 0:00 95031
111 张庆 男 1983-10-2 0:00 95032
112 李颖 女 1984-2-1 0:00 95033
113 冯丽 女 1984-2-1 0:00 95032
114 常飞 男 1983-6-23 0:00 95033教师表
教师编号 教师姓名 性别 生日 职称 系
100 吴丽 女 1980-7-7 0:00 讲师 电子工程系
101 赵旭东  NULL NULL 副教授 数学系
105 张春玲 女 NULL 副教授 计算机系
166 mary NULL NULL 教授 外语系
221 陈老师  男 1985-11-27 0:00 助教 电子工程系
231 常晶晶 女 NULL 助教 软件学院
804 李诚 男 1958-12-2 0:00 副教授 计算机系
825 王萍 女 1972-5-5 0:00 助教 计算机系
831 刘冰 女 1977-8-14 0:00 助教 电子工程系
856 张旭 男 1969-3-12 0:00 讲师 电子工程系
875 孙畅 男 1973-5-8 0:00 教授 数学系
878 周坚 男 1965-10-12 0:00 副教授 计算机系
883 张爱萍 女 1977-6-20 0:00 讲师 数学系课程表
课程号 课程名 教师编号
2-201 离散数学 875
3-105 计算机导论 825
3-245 操作系统 804
3-305 数学分析 100
4-088 英语 166
6-166 数据电路 856
9-888 高等数学 100成绩表
学号 课程号 分数
101 2-201 90
101 3-105 64
101 6-166 85
103 3-105 92
103 3-245 86
105 3-105 88
105 3-245 45
107 3-105 91
107 3-245 NULL
107 6-106 79
107 6-166 93
108 3-105 78
108 6-166 81
109 3-105 76
109 3-245 54
110 9-888 71
111 3-105 95等级表
级别 分数下届 分数上界
A 90 100
B 80 89
C 70 79
D 60 69
E 0 59要求:查询至少选修了学号为105的同学所选修的全部课程的学生信息我想了半天想不出来

解决方案 »

  1.   

    1、没有选课表,我用成绩表代替了,有成绩就表示选了这个课了。
    2、貌似应该有更简单的方式,但是我暂时也想不起来了declare @学生表 table 
    (学号 int,姓名 varchar(4),性别 varchar(2),生日 datetime,班级编号 int)
    insert into @学生表
    select 101,'李军','男','1976-2-20 0:00',95033 union all
    select 103,'陆君','男','1974-6-3 0:00',95031 union all
    select 105,'匡明','男','1975-10-2 0:00',95031 union all
    select 107,'王丽','女','1976-1-23 0:00',95033 union all
    select 108,'曾华','男','1977-9-1 0:00',95033 union all
    select 109,'王芳','女','1975-2-10 0:00',95031 union all
    select 110,'刘华','女','1976-1-23 0:00',95031 union all
    select 111,'张庆','男','1983-10-2 0:00',95032 union all
    select 112,'李颖','女','1984-2-1 0:00',95033 union all
    select 113,'冯丽','女','1984-2-1 0:00',95032 union all
    select 114,'常飞','男','1983-6-23 0:00',95033declare @成绩表 table (学号 int,课程号 varchar(5),分数 int)
    insert into @成绩表
    select 101,'2-201',90 union all
    select 101,'3-105',64 union all
    select 101,'6-166',85 union all
    select 103,'3-105',92 union all
    select 103,'3-245',86 union all
    select 105,'3-105',88 union all
    select 105,'3-245',45 union all
    select 107,'3-105',91 union all
    select 107,'3-245',null union all
    select 107,'6-106',79 union all
    select 107,'6-166',93 union all
    select 108,'3-105',78 union all
    select 108,'6-166',81 union all
    select 109,'3-105',76 union all
    select 109,'3-245',54 union all
    select 110,'9-888',71 union all
    select 111,'3-105',95select * from @学生表 m 
    right join(
    select b.学号 from
    (select 课程号,cou=(select count(1) from @成绩表 where 学号=105) 
    from @成绩表 where 学号=105 group by 课程号)a  
    join @成绩表 b on a.课程号=b.课程号
    where 学号<>105 group by 学号 having(count(学号)) =avg(cou)
    )n on m.学号=n.学号 /*
    学号          姓名   性别   生日                      班级编号        学号
    ----------- ---- ---- ----------------------- ----------- -----------
    103         陆君   男    1974-06-03 00:00:00.000 95031       103
    107         王丽   女    1976-01-23 00:00:00.000 95033       107
    109         王芳   女    1975-02-10 00:00:00.000 95031       109
    */
      

  2.   


    if object_id('学生表') is not null
       drop table 学生表
    go
    create table 学生表
    (
     学号 varchar(10),
     姓名 varchar(10),
     性别 varchar(10),
     生日 datetime,
     班级编号 varchar(10)
    )
    go
    insert into 学生表
    select '101','李军','男','1976-2-20 0:00','95033' union all
    select '103','陆君','男','1974-6-3 0:00','95031' union all
    select '105','匡明','男','1975-10-2 0:00','95031' union all
    select '107','王丽','女','1976-1-23 0:00','95033' union all
    select '108','曾华','男','1977-9-1 0:00','95033' union all
    select '109','王芳','女','1975-2-10 0:00','95031' union all
    select '110','刘华','女','1975-2-10 0:00','95031' union all
    select '111','张庆','男','1983-10-2 0:00','95032' union all
    select '112','李颖','女','1984-2-1 0:00','95033' union all
    select '113','冯丽','女','1984-2-1 0:00','95032' union all
    select '114','常飞','男','1983-6-23 0:00','95033'
    go
    if object_id('成绩表') is not null
       drop table 成绩表
    go
    create table 成绩表
    (
     学号 varchar(10),
     课程号 varchar(10),
     分数 int
    )
    go
    insert into 成绩表
    select '101','2-201',90 union all
    select '101','3-105',64 union all
    select '101','6-166',85 union all
    select '103','3-105',92 union all
    select '103','3-245',86 union all
    select '105','3-105',88 union all
    select '105','3-245',45 union all
    select '107','3-105',91 union all
    select '107','3-245',null union all
    select '107','6-106',79 union all
    select '107','6-166',93 union all
    select '108','3-105',78 union all
    select '108','6-166',81 union all
    select '109','3-105',76 union all
    select '109','3-245',54 union all
    select '110','9-888',71 union all
    select '111','3-105',95
    go
    select * from 学生表 where 学号 in(
    select 学号 from 成绩表 where 课程号 in (select 课程号 from 成绩表 where 学号='105') and 学号<>'105' group by 学号 having count(*)>=(select count(*) from 成绩表 where 学号='105')
    )
    /*
    学号         姓名         性别         生日                      班级编号
    ---------- ---------- ---------- ----------------------- ----------
    103        陆君         男          1974-06-03 00:00:00.000 95031
    107        王丽         女          1976-01-23 00:00:00.000 95033
    109        王芳         女          1975-02-10 00:00:00.000 95031(3 行受影响)
    */
      

  3.   

    晕死太难理解了,不过还是啃过来了,是不是这样:
    1.先选出只要选修了105同学课任一一门的学生(包括一门,多门,,用join 或者in)
    2.在用count 选出=count(105)同学的学生(学生不会一门课选修2次,1,2条件加起来就是选修了105同学全部课程的学生)
    3.用学生表 join