若有student表和grand表如下
student表
id | name |
---|---|
1 | 张三 |
2 | 李四 |
3 | 王五 |
grand表
id | grand | stuid |
---|---|---|
1 | 90 | 1 |
2 | 90 | 1 |
3 | 90 | 1 |
4 | 90 | 2 |
5 | 91 | 2 |
6 | 93 | 2 |
7 | 90 | 3 |
8 | 90 | 3 |
9 | 91 | 3 |
我要查出grand=90的人的name如何查询?
问题补充:
我想查出的结果只有张三,也就是只有张三的grand都为90,而不是只要是90的就查询出来!
回答问题前请各位大神先看看题目,谢谢啦!
1.换个思想:都大于等于90意思就是没有一个小于90的
where grand <90
2.找到grand 小于90的学生id:不管多少门课,只要有一个不上90的都被查出该学生的id
select stuid from grand where grand<90 group by stuid
3.过滤掉这些学生,那么剩下的就是都是超过90的学生了
select * from student where id not in(select stuid from grand where grand<90 group by stuid )
selet grand from grand where>90;
selet t.name from grand g left join student t on t.id=g.stuid where g.grand>=90;
select s.name from student s join grand g on s.id=g.stuid where g.grand=90
select * from student where id in (selet stuid from grand where grand=90)
第一可以用联合查询的方式,就是链表了
inner join ,但是推荐使用left join
select s.name from student s left join grand g on s.id=g.stuid where g.grand=90 group by g.stuid;
第二可以用嵌套查询
select * from student where id in (select stuid from grand where grand=90 group by stuid)