1老规矩,首先分析题目理清楚思路再做题,上图:
2.如上图,查询每门课都大于80分的学生姓名,那么第一反应这还不简单:
Select Distinct Name From Student Where Sorce>80(错),
但是这样查询出来的结果,只要大于80分科目的学生姓名就会进来(查询结果如下图),
3.我们与1图比对一下,你会发现李四的语文只有76分,张三的数学只有75分,是不符合条件大于80分的
4.正确思路,我们把所有学生当成一个整体,将它划分为成绩大于80分和小于等于80分的两块,为啥2部分SQL语句不行呢?
举个粒子:李四 语文90分,数学75分,那么按照2部分SQL语文符合条件,那么李四就是符合条件的学生,但数学不符合
5.反向思考,先获取小于等于80分的所有学生,修改下SQL语句,
Select Distinct Name From Student Where Sorce<=80
这次只要小于等于80分的学生都会被查出来,不存在漏网之鱼,然后我们再从整体中去排除掉这些学生,不就得到全部大于80分的学生了吗
6.正确的SQL语句:
Select Distinct Name From Student Where Name Not In(Select Distinct Name From Student Where Sorce<=80)
7.还有一种方法,先根据学生姓名分组去除重复学生,再限制该学生最小的一科分数必须要大于80分,如果符合条件,那么该学生所有的科目分数一定都大于80分
Select Name From Student Group By Name Having Min(Sorce)>80