问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

SQL查询中in和exists有什么区别?

发布网友 发布时间:2023-11-08 18:47

我来回答

1个回答

热心网友 时间:2023-11-17 11:47

1.exist,notexist一般都是与子查询一起使用.In可以与子查询一起使用,也可以直接in(a,b.....)\x0d\x0a\x0d\x0a2.exist会针对子查询的表使用索引.notexist会对主子查询都会使用索引.in与子查询一起使用的时候,只能针对主查询使用索引.notin则不会使用任何索引.注意,一直以来认为exists比in效率高的说法是不准确的。\x0d\x0ain是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。\x0d\x0a如果查询的两个表大小相当,那么用in和exists差别不大。\x0d\x0a如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:\x0d\x0a例如:表A(小表),表B(大表)1:select*fromAwhereccin(selectccfromB)\x0d\x0a效率低,用到了A表上cc列的索引;select*fromAwhereexists(selectccfromBwherecc=A.cc)\x0d\x0a效率高,用到了B表上cc列的索引。\x0d\x0a相反的2:select*fromBwhereccin(selectccfromA)\x0d\x0a效率高,用到了B表上cc列的索引;select*fromBwhereexists(selectccfromAwherecc=B.cc)\x0d\x0a效率低,用到了A表上cc列的索引。\x0d\x0anotin和notexists如果查询语句使用了notin那么内外表都进行全表扫描,没有用到索引;而notextsts的子查询依然能用到表上的索引。所以无论那个表大,用notexists都比notin要快。\x0d\x0a3.exist与in都可以实现一个目的.二者都可以用来过滤数据.\x0d\x0a示例:\x0d\x0a\x0d\x0aselectcount(1)fromt1;--160W\x0d\x0aselectcount(1)fromt2;--90W\x0d\x0a\x0d\x0aSELECTcount(1)\x0d\x0aFROMt1a\x0d\x0aWHEREEXISTS(SELECTaccountid\x0d\x0aFROMt2b\x0d\x0aWHEREa.keyid=b.keyidANDa.ideaid=b.ideaid);--主大子小,不适合使用exist,因为exist只会利用子表t2的复合索引keyid+ideaid,而子表内容要小与主表,主表由于无法使用索引,查询效率低下.\x0d\x0a\x0d\x0aselectcount(1)fromt1awhereaccountidin(SELECTaccountid\x0d\x0aFROMt2b\x0d\x0aWHEREa.keyid=b.keyidANDa.ideaid=b.ideaid);--主大子小,适合用in,因为in只会使用主表t1里面的复合主键keyid-ideaid,在主表大于子表的情况下,会很好的利用主表的索引.\x0d\x0a\x0d\x0a--后二条sql的执行结果都是一样的.说明exist与in在用法上可以达到一个目的,不同的地方是\x0d\x0a--1.性能的考虑此时就按子表大主表小用exist,子表小主表大用in的原则就可以.\x0d\x0a--2.写法的不同,exist的where条件是:"......whereexist(.....wherea.id=b.id)"\x0d\x0a--in的where条件是:"......whereidin(selectid....wherea.id=b.id)"\x0d\x0a\x0d\x0a4.exist的原理:\x0d\x0aexists做为where条件时,是先对where前的主查询询进行查询,然后用主查询的结果一个一个的代入exists的查询进行判断,如果为真则输出当前这一条主查询的结果,否则不输出\x0d\x0a比如\x0d\x0a如下:\x0d\x0a表A\x0d\x0aIDNAME\x0d\x0a1A1\x0d\x0a2A2\x0d\x0a3A3\x0d\x0a\x0d\x0a表B\x0d\x0aIDAIDNAME\x0d\x0a11B1\x0d\x0a22B2\x0d\x0a32B3\x0d\x0a\x0d\x0a表A和表B是一对多的关系A.ID-->B.AID\x0d\x0a\x0d\x0aSELECTID,NAMEFROMAWHEREEXISTS(SELECT*FROMBWHEREA.ID=B.AID)\x0d\x0a执行结果为\x0d\x0a1A1\x0d\x0a2A2\x0d\x0a原因可以按照如下分析\x0d\x0aSELECTID,NAMEFROMAWHEREEXISTS(SELECT*FROMBWHEREB.AID=1)\x0d\x0a-->SELECT*FROMBWHEREB.AID=1有值返回真所以有数据\x0d\x0a\x0d\x0aSELECTID,NAMEFROMAWHEREEXISTS(SELECT*FROMBWHEREB.AID=2)\x0d\x0a-->SELECT*FROMBWHEREB.AID=2有值返回真所以有数据\x0d\x0a\x0d\x0aSELECTID,NAMEFROMAWHEREEXISTS(SELECT*FROMBWHEREB.AID=3)\x0d\x0a-->SELECT*FROMBWHEREB.AID=3无值返回真所以没有数据\x0d\x0a\x0d\x0aNOTEXISTS就是反过来\x0d\x0aSELECTID,NAMEFROMAWHERENOTEXIST(SELECT*FROMBWHEREA.ID=B.AID)\x0d\x0a执行结果为\x0d\x0a3A3\x0d\x0a5.in与=的区别\x0d\x0aselectnamefromstudentwherenamein('zhang','wang','li','zhao');\x0d\x0a与\x0d\x0aselectnamefromstudentwherename='zhang'orname='li'orname='wang'orname='zhao'\x0d\x0a的结果是相同的。\x0d\x0ain的字段也可以与其它字段建复合索引.\x0d\x0a比如\x0d\x0aT1包含下面key,accountd,groupid.\x0d\x0a\x0d\x0aSELECT*\x0d\x0aFROMT1a\x0d\x0aWHEREa.groupid=2001\x0d\x0aANDa.accountid=1001\x0d\x0aANDa.keyIN('abc','def','ala');\x0d\x0a\x0d\x0a--上面的sql可以将accountid,key建成复合索引.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我想下个好点的股市行情软件,光大证券金阳光app怎么样啊? 股票行情软件下载选哪个比较好?光大证券的金阳光app怎么样? 光大证券开户APP是什么 光大用什么炒股软件 家里房顶漏水怎么办 房顶漏水最好补漏方法 中石化薪资揭秘(天津、海南、镇海、中科、茂名) 专科生在茂名石化待遇怎样 茂名石化正式工待遇怎么样 茂名石化待遇如何 729-08胶皮是内能的吗 去车管所办理贷款解压需要带什么证件?119 凡工程决算审计审减率超过10%的,则造价公司的审计费用由承包...4 车贷还清,解压手续怎么拿到手133 如何查看自己的身份证注册过几个22 正常恋爱多长时间同居合适呢?13 恋爱后多久提出同居比较合适?14 什么时候可以和男朋友同居?5 什么时候适合同居 电影八佰与地雷战之间有什么不同 滴友们,有谁知道沈阳网约车资格考试在哪里报名?考试有哪些要求,什_百 ... 长途开车需要准备哪些东西(长时间开车需要带什么) 开车需要哪些东西. 王者荣耀改名卡可以用几次33 毕节做头发哪家好3 下文从哪几方面表达“我爱我的祖国”。并自己也写一段。 倩女幽魂2怎样切换包裹跟锦囊3 恋人什么时候同居最合适 下列分子中相邻共价键的夹角最小的是 A、BF3 B、CCl4 C、NH3 D、H2O... 2012年理科366分。报考齐齐哈尔大学。服从分配。能被录取... 吃核桃分心木的副作用6 现在怎么查自己名下有几个实名39 我名下有几个 王者荣耀改名卡可以用几次33 云职达(上海)岗前实训基地在哪里? 节能采暖设备的发展历史? 光绪帝为何宠爱珍妃? 盘点光绪皇帝的3个女人,最爱的女人被扔进井中,马脸驼背成皇后... 你和你女朋友什么时候开始同居的? Acer 4750G 修改过硬盘模式(不管你是IDE,还是A...8 倩女幽魂手游上面包裹满了怎么删除 恋爱时,情侣在什么时候同居会比较合适呢? 男女同居什么时候才最合适2 宏基4750G 硬盘选择AHCi模式进不了系统只能选择IDE... 火锅店里绿色毛肚就是那种一包一包的!与直接上盘装的毛肚有什么区别吗... 阆中东风中学2011年高考怎么样 六六通留学可靠吗?号称免费为你咨询跟免费申请名校?真的假的啊?说... 重庆华宸医院管理有限责任公司怎么样? 重庆市李外婆老火锅店怎么样? 微信如何注销?5333 怎么注销241