50个查询系列-第一个查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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个查询系列-第一个查询的主要内容,如果未能解决你的问题,请参考以下文章

50个查询系列-第三个查询:查询所有同学的学号姓名选课数总成绩;

50个查询系列-第12个查询:查询至少学过学号为“1001”同学所有课程的其他同学学号和姓名

50个查询系列-第8个查询:查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号姓名;

50个查询系列-第11个查询:查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;

50个查询系列-第13个查询:把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;

50个查询系列-第七个查询:查询学过“叶平”老师所教的所有课的同学的学号姓名