50个查询系列-第六个查询:查询学过“001”并且也学过编号“002”课程的同学的学号姓名
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了50个查询系列-第六个查询:查询学过“001”并且也学过编号“002”课程的同学的学号姓名相关的知识,希望对你有一定的参考价值。
查询学过“001”并且也学过编号“002”课程的同学的学号、姓名:
我的写法:
第一步:先查出来学过“001”并且也学过编号“002”课程的同学的学号:
SELECT t11.t1sid t33id FROM (SELECT t1.StuId t1sid FROM tblscore t1 WHERE t1.CourseId=‘001‘)t11,-- 001的学生的id (SELECT t1.StuId t2sid FROM tblscore t1 WHERE t1.CourseId=‘002‘)t22-- 002的学生的id WHERE t11.t1sid=t22.t2sid
查询的结果是:
第二步:根据查出来的学生的id去查学生的姓名,学号
SELECT tblstudent.StuId,tblstudent.StuName FROM ( SELECT t11.t1sid t33id FROM (SELECT t1.StuId t1sid FROM tblscore t1 WHERE t1.CourseId=‘001‘)t11,-- 001的学生的id (SELECT t1.StuId t2sid FROM tblscore t1 WHERE t1.CourseId=‘002‘)t22-- 002的学生的id WHERE t11.t1sid=t22.t2sid )t33-- 查出来的是学过“001”并且也学过编号“002”课程的同学的学号 , tblstudent WHERE tblstudent.StuId=t33.t33id
查询结果:
答案的写法是:
SELECT StuId,StuName FROM tblStudent st WHERE (SELECT COUNT(*) FROM tblScore s1 WHERE s1.StuId=st.StuId AND s1.CourseId=‘001‘)>0 AND (SELECT COUNT(*) FROM tblScore s2 WHERE s2.StuId=st.StuId AND s2.CourseId=‘002‘)>0
我们看一些这个写法:
他的主表是学生表(tblstudent)
SELECT COUNT(*) FROM tblScore s1 WHERE s1.StuId=st.StuId AND s1.CourseId=‘001‘
这句话是说遍历tblstudent的每一条数据和tblscore里面的每一条数据,要求tblstudent的stuid和tblscore的数据一致:
这么一来的话候选项是:
然后
s1.CourseId=‘001‘这么一来的话:就只剩一条数据了。
如果满足
(SELECT COUNT(*) FROM tblScore s1 WHERE s1.StuId=st.StuId AND s1.CourseId=‘001‘)>0能查询出来的话就表示满足学过001的课程。
同理
(SELECT COUNT(*) FROM tblScore s2 WHERE s2.StuId=st.StuId AND s2.CourseId=‘002‘)>0能查询出来的话就表示满足学过002的课程。
同时满足这两个条件的学生就是同时上过两门课的学生。
以上是关于50个查询系列-第六个查询:查询学过“001”并且也学过编号“002”课程的同学的学号姓名的主要内容,如果未能解决你的问题,请参考以下文章
50个查询系列-第五个查询:查询没学过“叶平”老师课的同学的学号姓名;
50个查询系列-第七个查询:查询学过“叶平”老师所教的所有课的同学的学号姓名
50个查询系列-第12个查询:查询至少学过学号为“1001”同学所有课程的其他同学学号和姓名