2016 - 2024

感恩一路有你

sql中exists与in区别 oracle in和exists的区别?

浏览量:2883 时间:2021-03-13 14:23:42 作者:admin

oracle in和exists的区别?

一般来说,这两个是用来做两张(或更多)表联合查询用的,in是把外表和内表作hash连接,而exists是对外表作loop循环,假设有A、B两个表,使用时是这样的: 1、select*fromAwhereidin(selectidfromB)--使用in 2、select*fromAwhereexists(selectB.idfromBwhereB.id=A.id)--使用exists 也可以完全不使用in和exists: 3、selectA.*fromA,BwhereA.id=B.id--不使用in和exists 具体使用时到底选择哪一个,主要考虑查询效率问题: 第一条语句使用了A表的索引; 第二条语句使用了B表的索引; 第三条语句同时使用了A表、B表的索引; 如果A、B表的数据量不大,那么这三个语句执行效率几乎无差别; 如果A表大,B表小,显然第一条语句效率更高,反之,则第二条语句效率更高; 第三条语句尽管同时使用了A表、B表的索引,单扫描次数是笛卡尔乘积,效率最差。 以上纯属个人理解,仅供参考。

数据库中IN和EXISTS有什么区别?

没有什么区别,两者都是包含的意思,但是esists的效率比in要高。建议别用in,影响效率,如果只有两三个条件,就用or代替,如果值比较多,就用exists.例如select*fromtablewhere(name="1"orname="2")别写成namein("1","2")如果数据量比较大select*fromtablewherenameexists(selectnamefromtable2)

查询语句中in和exists的区别?

总的来说in和exists在得到结果上差不太多,如果只有一个字段

wherea.co1in(selectco1fromb)和whereexists(select1frombwhereco1=a.co1)这两个效果真的是一样一样的,但是用exists有个好处,它可以写更加复杂的逻辑判断,而in用起来就显得不那么好用了(同时判断多个字段,更加复杂的逻辑,in基本就无能无力);还有一点,没有做个大数据量测试,感觉in的效率会高那么一丢丢……这个没仔细测过,仅供参考

重点是!notin和notexists这俩东西,在有NULL的情况下,就会得到完全不一样的结果

假设b表的co1字段中存在NULL,ANSI_NULLS设置成on

wherea.co1notin(selectco1fromb)--这样写会一条数据都得不到

wherenotexists(select1frombwhereco1=a.co1)--这样写你能得到结果

具体数据,卤煮自己测试下吧,我就不写了有点晚。。

sql中exists与in区别 mysql in和exists区别 in和exists的用法

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。