首页 > 代码库 > 50个查询系列-第一个查询
50个查询系列-第一个查询
--问题:
--1、查询“001”课程比“002”课程成绩高的所有学生的学号;
第一步明确主表和次表。
我们要查询的是学生的学号,那么主表就是学生表(tblstudent)
但是我们要根据学生的成绩来筛选结果,所以我们的成绩表就是次表。
SELECT tblstudent.StuId -- tblstudent是主表,我们从主表里面查询我们的学生学号。from tblstudent表示我们查出来的就是表里面的数据数量 from tblstudent WHEre -- tblscore是次表,我们用来筛选数据 (SELECT TC.Score FROM tblscore TC WHERE TC.CourseId=‘001‘and tblstudent.StuId=tc.StuId)
>
(SELECT tb.Score FROM tblscore Tb WHERE Tb.CourseId=‘002‘ and tblstudent.StuId=Tb.StuId) /* 我们来看一下 (SELECT TC.Score FROM tblscore TC WHERE TC.CourseId=‘001‘and tblstudent.StuId=tc.StuId) 这条语句为什么这么写的? 首先我们去tblscore里面去查成绩,根据 TC.CourseId=‘001‘ 把所有的这门课的所有的学生的成绩查出来的成绩,查询结果是 有多少个学生,就会有多少个结果,那肯定不行啊,我要一个一个学生比较的,那怎么办,用tblstudent.StuId=tc.StuId来做一个限制 前面不是有很多个学生么,那么我这么一来,就做了一个限制,就只剩下一个学生了,也就是一个学生成绩了 */
上面的where里面就是依次遍历的时候用成绩去做判断。
上面的方法就是子查询。
我们衍生开去,写别的sql语句看看。
比如:
select * FROM tblscore ,tblstudent where tblscore.StuId=‘1001‘ and tblscore.CourseId=‘001‘
结果是:
22条语句。我们来分析:
FROM tblscore(55条) ,tblstudent(22)就这句话,我们产生的笛卡尔乘机就是tblscore的数据条数乘以tblstudetn的数据条数就是55*22=1210.
我们来看tblscore.StuId=‘1001‘那就是说我们的学生条数只有四条了(1001这个学只有四门课的成绩)+tblscore.CourseId=‘001‘:这么一来的话就只有一条数据了。因为学生表没有受到任何的限制,所以还是22条,然后这个条数(1条)乘以学生表的数据,那就是22条数据。
50个查询系列-第一个查询
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。