最新文章
- MySQL中, group by 和 order by 一起使用会有排序问题,group by 和 order by 同时使用时要注意的地方
- Vue学习笔记(10) ——Vue组件中的data和methods
- Vue学习笔记(9) ——Vue组件创建的几种方式
- Vue学习笔记(8) ——Vue实例的生命周期
- Vue学习笔记(7) —— 过滤器 filter的基本使用
- Vue学习笔记(6) ——v-if指令和v-show指令
- Vue学习笔记(5) —— v-for指令和key属性
- Vue学习笔记(5) —— Vue中样式-class样式和style样式
- Vue学习笔记(4) —— v-model指令,双向数据绑定
- Vue学习笔记(3) —— Vue事件修饰符
关注我

在线咨询
x
有什么可以帮到你

点击咨询
MySQL三种子查询详解
- 分类:MySQL技术
- 时间:2017-11-19
- 共850人围观
简介 where型子查询,内层的select 查询结果,放在了外层的查询条件里面;这种查询叫做where型子查询。from型子查询,先select 查询出结果集看作一张表,起一个别名,再在外层select这张临时表中的内容;对于外层是select,5中子句依旧可以使用
一、where型子查询
1. 查询最新的商品,以 goods_id 最大为最新
order by goods_id desc limit 1;
2. 不用 order by 如何做?
where goods_id=32;
3. 上条语句有何局限?
4. 查询最新商品的id(始终得到最大的 goods_id)
select max(goods_id) from goods;
5. 合并语句
select goods_id,goods_name from goods where goods_id=(select max(goods_id) from goods); # where型子查询 # 内层的select 查询结果,放在了外层的查询条件里面;这种查询叫做where型子查询
6. 有了where型子查询,可以查询每个栏目下最新的商品
1)分组查询每个栏目下最大的 goods_id select cat_id,max(goods_id) from goods group by cat_id; 2)合并 select goods_id,goods_name from goods where goods_id in (select max(goods_id) from goods group by cat_id);
二、from型子查询
1. sql的查询出的结果集看作一张表
select goods_id,goods_name,shop_price from goods where goods_id between 20 and 25;
以上sql输出的查询结果,也可以看成一个多行多列的表,针对这个查询出来的结果集,这个表,我们可以继续select
2. 这里可以用from型子查询,查出每个栏目下最新的商品
1)先按cat_id asc,goods_id desc排序 select goods_id,cat_id,goods_name from goods order by cat_id asc,goods_id desc; 2)合并 对上面sql语句查出的结果看作一张tmp表,这张表的每个栏目的第一行刚好是该栏目下goods_id 最大的一行 select goods_id,goods_name,cat_id from (select goods_id,cat_id,goods_name from goods order by cat_id asc,goods_id desc) as tmp group by cat_id from型子查询: 先select 查询出结果集看作一张表,起一个别名,再在外层select这张临时表中的内容;对于外层是select,5中子句依旧可以使用
三、exists型子查询
题目: 查询所有有商品的栏目
1. 什么叫有商品的栏目 ? 以 cat_id=1 为例
select * from goods where cat_id=1; 以上 sql, 能查出内容 , 是不是就是该栏目下有商品
2. 查询栏目表
select * from category;
3. 合并
查看栏目表 , 看这个栏目表对应的商品是否存在
查询栏目表 , 如果该 cat_id 在 goods 表能查出内容 , 则该栏目下有商品
exists 存在的意思
select * from category where exists (select * from goods where category.cat_id=goods.cat_id);
上一篇:MySQL子句的查询陷阱
下一篇:MySQL中的JOIN连接