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=‘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个查询系列-第一个查询的主要内容,如果未能解决你的问题,请参考以下文章
50个查询系列-第三个查询:查询所有同学的学号姓名选课数总成绩;
50个查询系列-第12个查询:查询至少学过学号为“1001”同学所有课程的其他同学学号和姓名
50个查询系列-第8个查询:查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号姓名;
50个查询系列-第11个查询:查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;