和in()的比较,二者的使用场景差不多。子查询表大则用exists(内层索引),子查询表小则用in(外层索引)。
在php做一些项目时,真正用到的子查询并不多,涉及复杂的查询,一般都在php中对复杂的查询进行拆分。因此,很php开发者对子查询并不熟悉。
下面,我对mysql常见的子查询知识点做些梳理,供大家参考:
1.where型子查询:把内层查询当作外层查询的比较条件
形如:
select * from goods where goods_id = (select max(goods_id) from goods);
注意: where后面 = in all 或者any等不通关键词子查询返回值也要相对应,如 ‘=’一般返回的是单行单列的数据。
2.from型子查询:把子查询当作一张临时表,对这张临时表在做查询
形如:(本sql取自近期的一个php项目)
SELECT COUNT(*) as loginnum FROM (SELECT COUNT(*) FROM `{$tableName}` WHERE device_id = {$param['id']} {$between} GROUP BY user_id) AS co;
注意: 必须给这个子查询临时表取别名 AS 'name'; 一定别忘了加AS取别名 。
3.exists型子查询:子查询就是对外层表进行循环,再对内表进行内层查询 形如:
select cat_id,cat_name from category where exists(select * from goods where goods.cat_id = category.cat_id);
注意: 和in()的比较,二者的使用场景差不多。子查询表大则用exists(内层索引),子查询表小则用in(外层索引)。
除特别注明外,本站所有文章均为作者原创。 或分享自己的编程经验,或探讨工作中的问题,或聊以人生趣事。 转载请注明出处来自 https://www.qiusuoweb.com/31.html
运营天数
总访问量
文章数量
-
-
-
交流群:157451741
新浪微博:草莽兴
发布评论