首页 > 代码库 > 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=001and 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个查询系列-第一个查询