table_name:score |
id name object score |
1 小强 语文 85 |
2 小强 数学 73 |
7 小强 美术 90 |
5 小狗 语文 80 |
6 小狗 数学 92 |
9 小狗 美术 95 |
3 小花 语文 70 |
4 小花 数学 79 |
8 小花 美术 85 |
SELECT * FROM score a WHERE a.score >= 80 AND NOT EXISTS( SELECT 1 FROM score b WHERE b.` name `=a.` name ` AND b.object != a.object AND b.score < 80) ORDER BY a.` name `; |
该语句的思路是:查出当前用户的信息,只要不存在:同用户、不同科目、分数小于80 |
SELECT * FROM score a WHERE a.` name ` NOT IN ( SELECT DISTINCT (b.` name `) FROM score b WHERE b.score < 80) |
该语句的思路是:查询每科成绩都大于80分的学生的所有科目信息,也就是说只要有一科分数小于80分的就不满足条件 |
相对两个语句来说,第二句思路好理解一点。应该还有其他很多种写法实现这种查询,欢迎指点! |