题目
有一张成绩表T20191107,表结构为SC(StuID,CID,Score),分部对应是学生ID,课程ID和学生成绩,有如下测试数据
查询出既学过'001'课程,也学过'003'号课程的学生ID 预期结果为
参考答案
create table T20191107
(
StuID int,
CID varchar(20),
Score int
);
insert into T20191107 values (1,'001',67);
insert into T20191107 values (1,'002',89);
insert into T20191107 values (1,'003',94);
insert into T20191107 values (2,'001',95);
insert into T20191107 values (2,'002',88);
insert into T20191107 values (2,'004',78);
insert into T20191107 values (3,'001',94);
insert into T20191107 values (3,'002',77);
insert into T20191107 values (3,'003',90);
--MySQL和SQL Server
-- 方法一
select t1.StuID from
(select StuID from T20191107
where CID='001') t1
inner join
(select StuID from T20191107
where CID='003') t2
on t1.StuID=t2.StuID;
-- 方法二
select t1.StuID from T20191107 t1
where t1.CID='001'
intersect
select t2.StuID from T20191107 t2
where t2.CID='003'
答案解析
方法一根据题意是要求找出同时选了‘001’和‘003’课程的学生,那么我们只需要分别找出选了‘001’课程的学生与选了‘003’课程的学生进行关联即可。
方法二则是直接取选了‘001’课程的学生与选了‘003’课程学生的交集,因为只有交集部分才是这两门课程的共同部分。