Mysql—— 三种子查询

资源下载入口

一、子查询的执行顺序:

严格的执行顺序:where > group by > having > order by > limit

 

二、where 子查询

解释:内层的查询结果作为外层的SQL的筛选条件

1.案例:查出序号(goods_id)最大的商品信息(goods_id、goods_name),goods 表部分结构如下:

采用非子查询的方法:

//排序很消耗系统资源,不推荐
SELECT goods_id,goods_name FROM goods ORDER BY goods_id DESC LIMIT 1;

采用 WHERE 子查询的方法:

SELECT goods_id,goods_name from goods WHERE goods_id = (SELECT MAX(goods_id) FROM goods);

2.案例:查出每种商品分类(cat_id)下商品序号(goods_id)最大的商品信息,goods 表结构同上

采用 WHERE 子查询解决:

SELECT goods_id,cat_id,goods_name FROM goods WHERE goods_id IN (SELECT max(goods_id) FROM goods GROUP BY cat_id);

采用右链接的方式解决:

SELECT goods.cat_id,goods_id,goods.goods_name FROM goods RIGHT JOIN 
(SELECT cat_id,MAX(goods_id) AS mg FROM goods GROUP BY cat_id) taa ON mg = goods_id;

三、from 型子查询

解释:内层的查询的结果集,当成外层SQL的原始表数据进行查询

案例:在以商品分类(cat_id)升序、商品序号(goods_id)降序排序的结果集中,查出前5个商品的信息,goods 表结构如下:

采用 from 子查询方式:

SELECT goods_id,cat_id,goods_name FROM (SELECT * FROM goods ORDER BY cat_id ASC,goods_id DESC) AS tmp LIMIT 0,5;

四、exists 型子查询

案例:在 category 表中查询出那些出现在 goods 表中的cat_id,显示分类名称(cat_name),category表和goods表如下:

采用 exists 子查询:

select cat_id,cat_name from category 
where exists(select * from goods where goods.cat_id = category.cat_id);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值