2016 - 2024

感恩一路有你

exists和in的区别 SQL关于exists和in的区别和用法?

浏览量:1384 时间:2021-03-12 01:40:02 作者:admin

SQL关于exists和in的区别和用法?

1.exist,notexist一般都是与子查询一起使用.in可以与子查询一起使用,也可以直接in(a,b.....)。

2.exist会针对子查询的表使用索引.notexist会对主子查询都会使用索引.in与子查询一起使用的时候,只能针对主查询使用索引.notin则不会使用任何索引.注意,一直以来认为exists比in效率高的说法是不准确的。

in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。

SQL中IN和EXISTS用法的区别?

in和existsin是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:例如:表A(小表),表B(大表)1:select*fromAwhereccin(selectccfromB)效率低,用到了A表上cc列的索引;select*fromAwhereexists(selectccfromBwherecc=A.cc)效率高,用到了B表上cc列的索引。相反的2:select*fromBwhereccin(selectccfromA)效率高,用到了B表上cc列的索引;select*fromBwhereexists(selectccfromAwherecc=B.cc)效率低,用到了A表上cc列的索引。notin和notexists如果查询语句使用了notin那么内外表都进行全表扫描,没有用到索引;而notextsts的子查询依然能用到表上的索引。所以无论那个表大,用notexists都比notin要快。in与=的区别selectnamefromstudentwherenamein("zhang","wang","li","zhao")与selectnamefromstudentwherename="zhang"orname="li"orname="wang"orname="zhao"的结果是相同的。

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表的索引,单扫描次数是笛卡尔乘积,效率最差。 以上纯属个人理解,仅供参考。

exists和in的区别 数据库in和exists的区别 oracleexists和in用法

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