tab_score表如下:

name course score
张三 语文 80
张三 数学 90
张三 英语 75
李四 语文 75
李四 数学 79
李四 英语 66
王五 语文 80
王五 数学 98
王五 英语 88

自连接

思路

获取出一张由学生姓名,语文成绩,数学成绩,英语成绩构成的一张表,那么我们就可以获取到满足条件的学生。

具体实现

通过自连接的方式,以姓名为连接条件,自连接三次(3门课程)(不推荐,自连接效率低,灵活性差)

逆向思维

思路

查询出成绩小于80分的人的姓名,不是小于80分的人就是所有科目大于80分的人。

具体实现

select distinct s1.name from tab_score s1 where s1.name not in (select distinct s2.name from tab_score s2 where s2.score<80)

group by

思路

按照姓名分组,在内存中有张中间表,再通过having子句进行筛选。

具体实现

select name from tab_score group by name having MIN(score>=80)