SQL里的EXISTS与in、not exists与not in
来源:互联网 发布:更新驱动软件下载 编辑:程序博客网 时间:2024/06/07 00:24
1、exists 与 in最大的区别
exists : 强调的是是否返回结果集,不要求知道返回什么, 比如:
exists引导的子句有结果集返回,那么exists这个条件就算成立了,大家注意返回的字段始终为1,如果改成“select
而 exists 与 in 最大的区别在于 in引导的子句只能返回一个字段,比如:
,in子句返回了三个字段,这是不正确的,exists子句是允许的,但in只允许有一个字段返回,在1,2,3中随便去了两个字段即可。
2、exists真的就比in的效率
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。
一直以来认为exists比in效率高的说法是不准确的。
如果查询的两个表大小相当,那么用in和exists差别不大。
如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:
IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。
例如:表A(小表),表B(大表)
1:
select * from A where cc in (select cc from B)
效率低,用到了A表上cc列的索引;
select * from A where exists(select cc from B where cc=A.cc)
效率高,用到了B表上cc列的索引。
相反的
2:
select * from B where cc in (select cc from A)
效率高,用到了B表上cc列的索引;
select * from B where exists(select cc from A where cc=B.cc)
效率低,用到了A表上cc列的索引。
3、not in 和not exists
如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;
而not extsts 的子查询依然能用到表上的索引。
所以无论那个表大,用not exists都比not in要快。
1、对于not exists查询,内表存在空值对查询结果没有影响;对于not in查询,内表存在空值将导致最终的查询结果为空。
2、对于not exists查询,外表存在空值,存在空值的那条记录最终会输出;对于not in查询,外表存在空值,存在空值的那条记录最终将被过滤,其他数据不受影响。
- sql Exists in 文章1:SQL里的EXISTS与in、not exists与not in 效率比较和使用
- sql里的exists与in、not exists与not in的区别
- SQL里的EXISTS与in、not exists与not in
- SQL里的EXISTS与in、not exists与not in
- SQL里的EXISTS与in、not exists与not in
- SQL里的EXISTS与in、not exists与not in 效率比较和使用
- SQL里的EXISTS与in、not exists与not in
- SQL里的EXISTS与in、not exists与not in
- SQL里的EXISTS与in、not exists与not in 效率比较和使用
- SQL里的EXISTS与in、not exists与not in
- SQL里的EXISTS与in、not exists与not in
- SQL里的EXISTS与in、not exists与not in 效率比较和使用
- (转)SQL 里的 EXISTS与in、not exists与not in
- SQL 里的 EXISTS与in、not exists与not in
- SQL里的EXISTS与in、not exists与not in
- SQL里的EXISTS与in、not exists与not in
- SQL里的EXISTS与in、not exists与not in 效率问题
- SQL里的EXISTS与in、not exists与not in
- 将博客搬至CSDN
- "How to use QThread in the right way (Part 1)"
- 根据输入流获得字节数组
- MyBatis的foreach语句
- oracle instr()
- SQL里的EXISTS与in、not exists与not in
- oracle sequences在sql中取值
- C++ 字符串 string 类成员函数与方法 小结
- 代理解决js跨域
- 应用程序本地化
- ios程序图标及启动图片尺寸
- 还原数据库时,提示因为数据库正在使用,无法获得对数据库的独占访问权!
- 安卓手机屏幕分辨率与dip、dp、sp的区别
- 天声人語 20150610