1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 50个查询系列-第五个查询:查询没学过“叶平”老师课的同学的学号 姓名;...

50个查询系列-第五个查询:查询没学过“叶平”老师课的同学的学号 姓名;...

时间:2019-08-09 02:20:16

相关推荐

50个查询系列-第五个查询:查询没学过“叶平”老师课的同学的学号 姓名;...

查询没学过“叶平”老师课的同学的学号、姓名:

我们反着来 !不是要查没上过课的同学的名字吗。我们先查上叶平的课的学生。

思路:

1.先去查叶平上的课的课程id:

SELECT t1.courseid kid FROM tblcourse t1,(SELECT tblteacher.TeaId tid FROM tblteacher WHERE tblteacher.TeaName='叶平') t2WHERE t1.teaid=t2.tid -- 查出来叶平老师上的课的课程id

结果是:

2;去成绩表中(tblscore)查有这个课程id的学生。

SELECT tblscore.StuIdFROM tblscore,( SELECT t1.courseid kid FROM tblcourse t1,(SELECT tblteacher.TeaId tid FROM tblteacher WHERE tblteacher.TeaName='叶平') t2WHERE t1.teaid=t2.tid) ykid-- 查出来叶平老师上的课的课程idWHERE tblscore.CourseId=ykid.kid

结果如下:

我们可以看到上面的结果中有两个1013,这是因为这个学生有两门课都是叶平的课在查询时就查出来了。

我当时就很纠结,怎么才能把重复结果去掉呢。就一个1013好了。

后来我看了答案。答案也是这样的,两个1013

后来我对啊。我们最后查出来要的是不在这个列表里面的学生的id啊,那么这个列表里有几个重复的学生其实是没有关系的。

所以最后的写法就是:

SELECT *FROMtblstudentWHERE tblstudent.StuIdNOT IN(SELECT tblscore.StuIdFROM tblscore,( SELECT t1.courseid kid FROM tblcourse t1,(SELECT tblteacher.TeaId tid FROM tblteacher WHERE tblteacher.TeaName='叶平') t2WHERE t1.teaid=t2.tid) ykid-- 查出来叶平老师上的课的课程idWHERE tblscore.CourseId=ykid.kid )

查询结果:

答案的写法是:

SELECT StuId,StuName FROM tblStudentWHERE StuId NOT IN(SELECT StuID FROM tblScore scINNER JOIN tblCourse cu ON sc.CourseId=cu.CourseIdINNER JOIN tblTeacher tc ON cu.TeaId=tc.TeaId WHERE tc.TeaName='叶平')

扩展:

上面说到了重复记录怎么去除呢:用函数distinct

SELECT DISTINCT(t11.idd)FROM (SELECT tblscore.StuId iddFROM tblscore,( SELECT t1.courseid kid FROM tblcourse t1,(SELECT tblteacher.TeaId tid FROM tblteacher WHERE tblteacher.TeaName='叶平') t2WHERE t1.teaid=t2.tid) ykid-- 查出来叶平老师上的课的课程idWHERE tblscore.CourseId=ykid.kid )t11

结果:

就一个1013了。没有重复记录了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。