首页 > 其他 > 详细

关于where子句中的子查询语法说明

时间:2014-03-01 04:46:37      阅读:446      评论:0      收藏:0      [点我收藏+]

首先说一句,大神就不用看了。bubuko.com,布布扣

先看一个sql语句

select distinct name from user u1 where (select count(*) from user u2 where u1.name=u2.name)>3

这句话是选出user表中name字段相同的名字出现三次以上的name。

这句话的语义到底应该怎么分析呢?

在SQL语句中,where表示条件,如果这一行满足where之后的条件,就是说,将这一行代入where之后的表达式,如果返回true,那么就选择这一行,如果返回false,就丢弃这一行。

那么这句话的语义也就比较好理解了,就是,将user表中的行分别代入where后面的表达式,也就是后面的子查询,如果后面的子查询查询结果大于3,那么就保留这一行,如果不大于3,就丢弃这一行。而where子句中子查询选出来的就是name在这张表中的出现次数。


但是这种查询在MYSQL中效率是非常低的,explain他可以看到第二行是DEPENDENT SUBQUERY,也就是说,子查询依赖于第一行的查询结果,这个查询是分两步走的,

第一步:查询出所有user中的行,

第二步:将每一行中的在子查询中使用的字段代入子查询,将子查询的结果代入,以决定是否需要保留这一行

这样效率绝对上不去了!

关于where子句中的子查询语法说明,布布扣,bubuko.com

关于where子句中的子查询语法说明

原文:http://blog.csdn.net/whodarewin2005/article/details/19922859

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!