首页 > 代码库 > 50个查询系列-第六个查询:查询学过“001”并且也学过编号“002”课程的同学的学号、姓名
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”课程的同学的学号、姓名
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。