子查询可以对查询效率进行优化。延迟加载
父表子表同为上篇文章父表子表
- select 子查询
select classid from `student` where `name`='张三'
// 在学生表中查找名字叫张三的教室id 然后在根据教室id在教室表查询对应的教室名 下面即为子查询
select (selcet name from `classroom` where id = classid) from `student` where `name`='张三'
// 在学生表中查找名字叫张三的教室id
- where子查询
// 同上思路
select classid from `student` where name='张三'
//查教室表
select name from `classroom` where id=(select classid from `student` where name='张三')
//
// 查询张三和王五所在的教室名
select name from `classroom` where id in(select classid from `student` where name in('张三','王五'))
- from子查询:主要用于3张表以上的连接查询
假如有a、b、c三张表,先查询a、b,在用a、b查询的结果,在和c表进行连接查询
select子查询和where子查询是把子查询的结果当成数据来查询,from子查询是把查询的结果当成表来查询
select c.name from (select name,id from`a`,`b` where a.id=b.id ) t1,`classroom` c where t1.c=c.id
// 先查询a表中id和b表中id相同的name和id数据,返回的name,id的数据别名叫t1
// 在查询t1表和教室表中id相同的数据的教室名字