真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

in和exists的區(qū)別以及exists和distinct去重的區(qū)別?

小編相信大家都知道in和exists的區(qū)別:
1、運用情況不同
sql中in適用于子查詢得出的結果集記錄較少,主查詢中的表較大且又有索引的表,。sql中exist適用于外層的主查詢記錄較少,子查詢中的表大,又有索引的時候。

我們提供的服務有:成都做網(wǎng)站、成都網(wǎng)站建設、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、海原ssl等。為近千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的海原網(wǎng)站制作公司

2、驅動順序不同
IN是先查詢子查詢的表,然后將內表和外表做一個笛卡爾積,然后按照條件進行篩選。exists是以外層表為驅動表,先被訪問。

3、底層原理不同
in 是把外表和內表作hash 連接,而exists是對外表作loop循環(huán),每次loop循環(huán)再對內表進行查詢。

但是我昨天看到有位博主講到還有一個區(qū)別就是對null值處理不同:IN不對NULL進行處理,exists會對NULL值進行處理。這個我沒有聽過,所以本著好奇心就去測試了一下,我發(fā)現(xiàn)沒有什么不同,查詢出來的數(shù)據(jù)也是一樣。至于其他的小編就不在這里一一測試的,有興趣的小伙伴自己私下測試一下。

先創(chuàng)建兩張表stu存放學生的編號,姓名以及班級
in和exists的區(qū)別以及exists和distinct去重的區(qū)別?
grade表存放學生的編號以及分數(shù)。
in和exists的區(qū)別以及exists和distinct去重的區(qū)別?
代碼如下:
select from stu t1 where exists (select from grade t2 where t1.stuno = t2.stuno) order by t1.stuno;

select from stu t1 where t1.stuno in (select t2.stuno from grade t2 where t1.stuno = t2.stuno) order by t1.stuno;
查詢結果是一樣的,如下:
in和exists的區(qū)別以及exists和distinct去重的區(qū)別?
在這里注意兩點:
1、sql中查詢的字段均為stu表中的字段,不能寫為:
select t2.
from stu t1 where t1.stuno in (select t2.stuno from grade t2 where t1.stuno = t2.stuno) order by t1.stuno;否則會報錯t2.標示符無效。
2、in是單字段查詢,所以子查詢中一定要注意!不能寫為:
select
from stu t1 where t1.stuno in (select * from grade t2 where t1.stuno = t2.stuno) order by t1.stuno;否則會報錯值過多。

如果哪位小伙伴有不同的見解,歡迎給小編留言,小編好及時糾正,謝謝!

接下來討論一下exists和distinct去重:
代碼如下,id唯一:
select from stu t1 where exists (select from grade t2 where t1.stuno = t2.stuno) order by t1.stuno;
查詢出的數(shù)據(jù)結果如下圖:
in和exists的區(qū)別以及exists和distinct去重的區(qū)別?
我當時就一直在這里困擾,exists不是有去重的效果嗎?為什么數(shù)據(jù)里id還是有重復數(shù)據(jù)出現(xiàn),后來小編一直做實驗測試發(fā)現(xiàn),查詢出的數(shù)據(jù)好像是先滿足子查詢中的where條件之后,然后對子查詢中的數(shù)據(jù)去重,并不是對主表去重,最后返回符合數(shù)據(jù)的主表中的數(shù)據(jù)。后來就根據(jù)這個發(fā)現(xiàn)多做了一個測試,發(fā)現(xiàn)還真是這樣。
還可以用一下sql代碼替換:
select t1.* from stu t1,(select distinct a.stuno from grade a) t2 where t1.stuno = t2.stuno order by t1.stuno;
相信大家通過這兩條代碼發(fā)現(xiàn)通過distinct不能直接實現(xiàn)exists上面查詢的效果!exists的效率會更高:
以下exists的解釋計劃窗口截圖:
in和exists的區(qū)別以及exists和distinct去重的區(qū)別?
以下distinct的解釋計劃窗口截圖:
in和exists的區(qū)別以及exists和distinct去重的區(qū)別?

所以小編今天整理一下,也希望更多網(wǎng)友不要跟我一樣再犯傻了,浪費時間不說,還一直有一個錯誤的理解!
大家還有什么更好的想法歡迎給小編留言!


分享題目:in和exists的區(qū)別以及exists和distinct去重的區(qū)別?
文章出自:http://weahome.cn/article/picsjo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部