日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Sql语句中IN和exists的区别及应用

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Sql语句中IN和exists的区别及应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  表展示

    首先,查詢中涉及到的兩個表,一個user和一個order表,具體表的內容如下:

    user表:

    

    order表:

    

?

  in

    確定給定的值是否與子查詢或列表中的值相匹配。in在查詢的時候,首先查詢子查詢的表,然后將內表和外表做一個笛卡爾積,然后按照條件進行篩選。所以相對內表比較小的時候,in的速度較快。

    具體sql語句如下:

1 SELECT 2 * 3 FROM 4 `user` 5 WHERE 6 `user`.id IN ( 7 SELECT 8 `order`.user_id 9 FROM 10 `order` 11 )

    這條語句很簡單,通過子查詢查到的user_id 的數據,去匹配user表中的id然后得到結果。該語句執行結果如下:

    

    它的執行流程是什么樣子的呢?讓我們一起來看一下。

    首先,在數據庫內部,查詢子查詢,執行如下代碼:

SELECT`order`.user_idFROM`order`

    執行完畢后,得到結果如下:

    

    此時,將查詢到的結果和原有的user表做一個笛卡爾積,結果如下:

    

    此時,再根據我們的user.id IN order.user_id的條件,將結果進行篩選(既比較id列和user_id 列的值是否相等,將不相等的刪除)。最后,得到兩條符合條件的數據。
    

  exists

    指定一個子查詢,檢測行的存在。遍歷循環外表,然后看外表中的記錄有沒有和內表的數據一樣的。匹配上就將結果放入結果集中。

    具體sql語句如下:

1 SELECT 2 `user`.* 3 FROM 4 `user` 5 WHERE 6 EXISTS ( 7 SELECT 8 `order`.user_id 9 FROM 10 `order` 11 WHERE 12 `user`.id = `order`.user_id 13 )

    這條sql語句的執行結果和上面的in的執行結果是一樣的。

    

    但是,不一樣的是它們的執行流程完全不一樣:

    使用exists關鍵字進行查詢的時候,首先,我們先查詢的不是子查詢的內容,而是查我們的主查詢的表,也就是說,我們先執行的sql語句是:

    ?SELECT?`user`.*?FROM?`user`?

    得到的結果如下:

    

    然后,根據表的每一條記錄,執行以下語句,依次去判斷where后面的條件是否成立:

EXISTS (SELECT`order`.user_idFROM`order`WHERE`user`.id = `order`.user_id)

    如果成立則返回true不成立則返回false。如果返回的是true的話,則該行結果保留,如果返回的是false的話,則刪除該行,最后將得到的結果返回。

  區別及應用場景

    in 和 exists的區別: 如果子查詢得出的結果集記錄較少,主查詢中的表較大且又有索引時應該用in, 反之如果外層的主查詢記錄較少,子查詢中的表大,又有索引時使用exists。其實我們區分in和exists主要是造成了驅動順序的改變(這是性能變化的關鍵),如果是exists,那么以外層表為驅動表,先被訪問,如果是IN,那么先執行子查詢,所以我們會以驅動表的快速返回為目標,那么就會考慮到索引及結果集的關系了 ,另外IN時不對NULL進行處理。

    in 是把外表和內表作hash 連接,而exists是對外表作loop循環,每次loop循環再對內表進行查詢。一直以來認為exists比in效率高的說法是不準確的。

  not in 和not exists

    如果查詢語句使用了not in 那么內外表都進行全表掃描,沒有用到索引;而not extsts 的子查詢依然能用到表上的索引。所以無論那個表大,用not exists都比not in要快。

總結

以上是生活随笔為你收集整理的Sql语句中IN和exists的区别及应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩欧美高清在线 | 日韩美女国产精品 | 久久精品香蕉 | 最新色视频 | 中文字幕免费中文 | 黄色av网站在线看 | 人妻无码久久一区二区三区免费 | 天天看片天天干 | 中文字幕精品一区久久久久 | 色亚洲欧美 | 丰满肉肉bbwwbbww | 男人的天堂在线观看av | 超碰丝袜 | 黄色视屏网站 | 亚洲色图国产精品 | 欧美做爰性生交视频 | 欧美专区综合 | 诱人的乳峰奶水hd | 成人性生生活性生交3 | 伊人网久久久 | 在线视频亚洲欧美 | 91片黄在线观 | 理论片91 | av日韩av| 国产模特av私拍大尺度 | 羞辱狗奴的句子有哪些 | 性网| 最近中文字幕在线观看 | 椎名由奈av一区二区三区 | 精品人妻一区二区三区久久嗨 | 少妇做爰免费视频播放 | 欧美劲爆第一页 | 91综合色 | 日韩在线一区二区 | 精品福利一区二区三区 | 水蜜桃影库 | 丰满肉肉bbwwbbww| 高清视频在线免费观看 | 全部免费毛片在线播放一个 | 婷婷人体 | 日韩裸体视频 | 亚洲av无码电影在线播放 | 国产黄色自拍视频 | 九九精品在线观看 | 日韩成人一区二区 | 嫩草影院永久入口 | 欧美人与性动交α欧美精品 | 蜜桃臀av一区二区三区 | 欧美三级又粗又硬 | 亚洲av午夜精品一区二区三区 | 插我舔内射18免费视频 | 伊人久久久久久久久久久久久 | 狠操av | 久久伊人五月天 | 亚洲春色在线观看 | 污污内射在线观看一区二区少妇 | 亚洲成人tv | 一级黄色播放 | 成人小视频在线免费观看 | 亚洲天堂伊人网 | 国产精欧美一区二区三区白种人 | 在线播放国产精品 | 在线不卡中文字幕 | 国产综合影院 | 成人影片在线播放 | 欧美xx孕妇 | 日韩欧美一级片 | 91精品国产综合久久久久久久 | 久久国产成人精品 | 亚洲黄色影院 | 免费在线视频一区 | 国产亚洲欧美一区二区 | 国产一区二区三区在线播放无 | 亚洲综合大片69999 | 中文字幕91爱爱 | 性视频网 | 亚洲一区区| 中文字幕人妻丝袜二区 | 人体av| 午夜一二区 | 免费无码国产v片在线观看 三级全黄做爰在线观看 | 久久久精品免费观看 | 国产三级a| 污视频免费在线观看网站 | 亚洲六月丁香色婷婷综合久久 | 涩涩涩在线视频 | 男人影院在线观看 | 成人网在线看 | 国产一av| 青青草社区视频 | 操欧美美女| 91麻豆影院 | 18久久| 911香蕉| 国产成人在线观看免费 | av三级| 亚洲精品97 | 亚洲午夜av在线 | 黄色一级片. |