一、where型子查询
把内层查询的结果作为外层查询的比较条件
1、查询id最大的商品(最新的商品)
方法1:子查询,先查询最大的id,再根据id查询商品
select goods_name,cat_id,goods_id from goods where goods_id=(select max(goods_id) from goods);
方法2:排序查商品
select goods_name,goods_id from goods order by goods_id desc limit 1;
2、查询每个栏目下id最大的商品信息
select goods_name goods_id,cat_id from goods where goods_id in (select max(goods_id) from goods group by cat_id);
注意:如果where 列=(内层sql),则内层sql返回的必是单行单列,单个值;如果where 列 in (内层sql),则内层sql返回单列,可以多行
二、from子查询
查询结果集可以当作表来看,对 查询结果集再次查询
from(内层sql),把内层sql当作临时表,再次查询
三、exist型子查询
把外层的sql结果拿到内层测试,如果内层sql成立,则取出该行
结合goods表和category表,把下面有商品的栏目取出来
select cat_id,cat_name from category where exists (select * from goods where goods.cat_id=category.cat_id);