您現(xiàn)在的位置是:首頁 >生活 > 2024-10-30 14:18:23 來源:
sql EXISTS函數(shù)(sqlexists)
大家好,我是小夏,我來為大家解答以上問題。sql EXISTS函數(shù),sqlexists很多人還不知道,現(xiàn)在讓我們一起來看看吧!
兩者都能實現(xiàn)表功能查詢,主要區(qū)別如下:
1、適用表的類型不同。
in是子查詢?yōu)轵?qū)動表,外面的表為被驅(qū)動表,故適用于子查詢結(jié)果集小而外面的表結(jié)果集大的情況。
exists是外面的表位驅(qū)動表,子查詢里面的表為被驅(qū)動表,故適用于外面的表結(jié)果集小而子查詢結(jié)果集大的情況。
2、子查詢關聯(lián)不同。
exists一般都是關聯(lián)子查詢。對于關聯(lián)子查詢,必須先執(zhí)行外層查詢,接著對所有通過過濾條件的記錄,執(zhí)行內(nèi)層查詢。外層查詢和內(nèi)層查詢相互依賴,因為外層查詢會把數(shù)據(jù)傳遞給內(nèi)層查詢。
in則一般都是非關聯(lián)子查詢,非關聯(lián)子查詢則必須先完成內(nèi)層查詢之后,外層查詢才能介入。
3、執(zhí)行次數(shù)不同。
IN 語句:只執(zhí)行一次,確定給定的值是否與子查詢或列表中的值相匹配。in在查詢的時候,首先查詢子查詢的表,然后將內(nèi)表和外表做一個笛卡爾積,然后按照條件進行篩選。所以相對內(nèi)表比較小的時候,in的速度較快。
EXISTS語句:執(zhí)行次數(shù)根據(jù)表的長度而定。指定一個子查詢,檢測行的存在。遍歷循環(huán)外表,然后看外表中的記錄有沒有和內(nèi)表的數(shù)據(jù)一樣的。匹配上就將結(jié)果放入結(jié)果集中。
參考資料來源:搜狗百科--In操作符
參考資料來源:搜狗百科--Exists
本文到此講解完畢了,希望對大家有幫助。