学生表
学号 姓名 性别 生日 班级编号
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的同学所选修的全部课程的学生信息我想了半天想不出来
学号 姓名 性别 生日 班级编号
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的同学所选修的全部课程的学生信息我想了半天想不出来
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
*/
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 行受影响)
*/
1.先选出只要选修了105同学课任一一门的学生(包括一门,多门,,用join 或者in)
2.在用count 选出=count(105)同学的学生(学生不会一门课选修2次,1,2条件加起来就是选修了105同学全部课程的学生)
3.用学生表 join