exists,in的区别-mysql
来源:互联网 发布:minecraft java 编辑:程序博客网 时间:2024/06/03 19:21
如说两张表一张是用户表TDefUser(userid,address,phone),一张是消费表TAccConsume(userid,time,amount),我要查消费超过5000的用户记录,那么我可以写
select
*
from
TDefUser
where
exists (
select
1
from
TAccConsume
where
TDefUser.userid=TAccConsume.userid
and
TAccConsume.amount> 5000)
也可以写:
select * from TDefUser where userid in (select userid from TAccConsume where TAccConsume.amount> 5000)
select 1 代表什么意思呢?
==============
师傅说因为exists只返回真或假,select 1 可以提高效率。
exists()后面的子查询被称做相关子查询 他是不返回列表的值的.只是返回一个ture或false的结果(这也是为什么子查询里是 "select 1 "的原因 当然也可以select任何东西)
其运行方式是先运行主查询一次 再去子查询里查询与其对应的结果 如果是ture则输出,反之则不输出.再根据主查询中的每一行去子查询里去查询.
in()后面的子查询 是返回结果集的,换句话说执行次序和exists()不一样.子查询先产生结果集,然后主查询再去结果集里去找符合要求的字段列表去.符合要求的输出,反之则不输出.
可是我不太知道exists的执行过程是怎么样的
------------------------------------------
执行顺序如下:
1.首先执行一次外部查询
2.对于外部查询中的每一行分别执行一次子查询,而且每次执行子查询时都会引用外部查询中当前行的值。
3.使用子查询的结果来确定外部查询的结果集。
如果外部查询返回100行,SQL 就将执行101次查询,一次执行外部查询,然后为外部查询返回的每一行执行一次子查询。但实际上,SQL的查询
优化器有可能会找到一种更好的方法来执行相关子查询,而不需要实际执行101次查询。
有人说:能用左连接做掉的事情,尽量不要去用exists,in之类的
又有人说:exists的性能比外连接更好,曾用过做数十万数据量的查询,exists大概比外连接快30%左右
还有人说:如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in;反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists
- exists,in的区别-mysql
- Mysql中exists和in的区别
- MySQL中exists和in的区别
- mysql中exists和in的区别
- MySQL查询条件中exists和in的区别
- exists 和 in 的区别
- EXISTS与IN的区别
- exists 和 in 的区别
- EXISTS与In的区别
- Exists和In的区别
- In与Exists的区别
- exists 与 in 的区别
- EXISTS和IN的区别
- exists 和in 的区别
- exists 和 in 的区别
- In与Exists的区别
- In与Exists的区别
- In与Exists的区别
- python学习资料
- Java_基础—用LinkedList模拟栈数据结构的集合并测试
- python爬虫练习2
- 基于Qt的简易通用开发框架
- hdu1754-I Hate It 线段树RMQ算法求区间最值问题
- exists,in的区别-mysql
- 牛客网---2016---美团字符串计数
- 正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
- 十步完全理解 SQL
- Pyspider实例之抓取小米众筹产品
- Spark-Streaming的window滑动窗口及热点搜索词统计案例
- springMVC+spring+hibernate基础配置文件
- SQL SERVER运维日记--收缩数据库
- Mysql