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)