mysql三种子查询的方式

(1)where型子查询
对于where型子查询,就是先查询出所想查询数据的标识符,然后再通过where将数据库中与标识符所对应的行取出来。
(2)from型子查询
对于from型子查询,就是将第一次查询出来的结果当作一个表,再对表中的数据进行操作,得到所要查询的数据。
(3)exist型子查询
exist需要在两个有关联的表中进行使用,通过exist可以判断出一个“交集”,然后将这个交集取出来。
for exaple:
我们现在有一个数据库
在这里插入图片描述
这个数据库中包含了两个人的各科成绩以及一列id号。
**题目:**取出每个学生所对应的最大id号
where子查询
我们可以通过select name,max(id) from garden(该数据表的名称)group by(name);
在这里插入图片描述
看似找出了正确的答案,在执行一下

select name,max(id),subject from garden group by(name);

在这里插入图片描述
可以看出,这里的id号所对应的科目并不正确,这里对应的科目知识按照名字分完类之后,每个人所对应的第一个科目。
但是这里的id号是正确的,对应的就是最大的id号

select * from garden where id in (select max(id) from garden group by(name));

在这里插入图片描述
这样查询出来的结果就是正确的
from子查询
这道题使用from来做的话,首先我们知道group by函数的用法,在使用group by的时候,会将每类数据的第一个数据取出来,这样的话,我们就只需要将最大id号的数据放在每一类的第一行就好了

select * from garden order by name desc,id desc;

在这里插入图片描述
然后再将这个结果表进行group by

select * from (select name,id,sorce,subject from garden order by name desc,id desc) as tmp group by(name);

在这里插入图片描述
exist查询
我们在新建一张表
在这里插入图片描述
我们想查询出第一张表中的所有人在第二张表中的所存在其它成绩

select * from othersub where exists(select * from garden where garden.name = othersub.name);

在这里插入图片描述


版权声明:本文为qq_41569627原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。