50个查询系列-第六个查询:查询学过“001”并且也学过编号“002”课程的同学的学号、姓名
生活随笔
收集整理的這篇文章主要介紹了
50个查询系列-第六个查询:查询学过“001”并且也学过编号“002”课程的同学的学号、姓名
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
查詢學過“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
查詢的結(jié)果是:
第二步:根據(jù)查出來的學生的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
查詢結(jié)果:
答案的寫法是:
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的每一條數(shù)據(jù)和tblscore里面的每一條數(shù)據(jù),要求tblstudent的stuid和tblscore的數(shù)據(jù)一致:
這么一來的話候選項是:
然后
s1.CourseId='001'這么一來的話:就只剩一條數(shù)據(jù)了。
如果滿足
(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的課程。
同時滿足這兩個條件的學生就是同時上過兩門課的學生。
總結(jié)
以上是生活随笔為你收集整理的50个查询系列-第六个查询:查询学过“001”并且也学过编号“002”课程的同学的学号、姓名的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 22款经典UI设计二级下拉菜单导航系列
- 下一篇: Hibernate入门注解笔记