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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle中代替in 和not in 高效方法

發(fā)布時間:2025/7/14 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle中代替in 和not in 高效方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
-- 在oracle中效率排行:表連接>exist>not exist>in>not in; -- 因此如果簡單提高效率可以用exist代替in進行操作,當(dāng)然換成表連接可以更快地提高效率, -- 具體是用left join代替not in 和not exist,用inner join 代替in和exist,這樣可以大大提高效率。具體例子如下: -- A、NOT IN、NOT EXISTS的相關(guān)子查詢可以改用LEFT JOIN代替寫法。 -- 比如: SELECT PUB_NAME FROM PUBLISHERS WHERE PUB_ID NOT IN (SELECT PUB_ID FROM TITLES WHERE TYPE = 'BUSINESS')-- 可以改寫成: SELECT A.PUB_NAME FROM PUBLISHERS A LEFT JOIN TITLES B ON B.TYPE = 'BUSINESS' AND A.PUB_ID=B. PUB_IDWHERE B.PUB_ID IS NULL -- (2) SELECT TITLE FROM TITLES WHERE NOT EXISTS(SELECT TITLE_ID FROM SALES WHERE TITLE_ID = TITLES.TITLE_ID)-- 可以改寫成: SELECT TITLE FROM TITLES LEFT JOIN SALES ON SALES.TITLE_ID = TITLES.TITLE_IDWHERE SALES.TITLE_ID IS NULL -- B、 如果保證子查詢沒有重復(fù) ,IN、EXISTS的相關(guān)子查詢可以用INNER JOIN 代替。比如: SELECT PUB_NAME FROM PUBLISHERS WHERE PUB_ID IN (SELECT PUB_ID FROM TITLES WHERE TYPE = 'BUSINESS') 可以改寫成: SELECT DISTINCT A.PUB_NAME FROM PUBLISHERS A INNER JOIN TITLES B ON B.TYPE = 'BUSINESS' AND A.PUB_ID=B. PUB_ID-- 有兩個簡單例子,以說明 “exists”和“in”的效率問題1) select * from T1 where exists(select * from T2 where T1.a=T2.a) ;-- T1數(shù)據(jù)量小而T2數(shù)據(jù)量非常大時,T1<<T2 時,1) 的查詢效率高。2) select * from T1 where T1.a in (select T2.a from T2) ;-- T1數(shù)據(jù)量非常大而T2數(shù)據(jù)量小時,T1>>T2 時,2) 的查詢效率高。exists 用法:-- 1)句中的“select * from T2 where T1.a=T2.a” 相當(dāng)于一個關(guān)聯(lián)表查詢, -- -- 相當(dāng)于“select * from T1,T2 where T1.a=T2.a”;“exists(xxx)”它只在乎括號里的數(shù)據(jù)能不能查找出來,是否存在這樣的記錄,如果存在,這1)句的where 條件成立。in的用法:2)句中的“select * from T1 where T1.a in (select T2.a from T2) ”,這里的“in”后面括號里的語句搜索出來的字段的內(nèi)容一定要相對應(yīng),一般來說,T1和T2這兩個表的a字段表達的意義應(yīng)該是一樣的,否則這樣查沒什么意義。---sql語句查詢中exists中為什么要用select 1? select * from call_cdr_xz_200609 a where and a.ori_charge<>0 and exists(select 1 from special b where a.called_nbr like b.special_nbr||'%' and b.billing_state=0 ) --,好比這個,為什么要加select 1?括號中的條件字句不是恒成立的嗎,求解 如果有查詢結(jié)果,查詢結(jié)果就會全部被1替代(當(dāng)不需要知道結(jié)果是什么,只需要知道有沒有結(jié)果的時候會這樣用),可以提高語句的運行效率,在大數(shù)據(jù)量的情況下,提升效果非常明顯

?

總結(jié)

以上是生活随笔為你收集整理的oracle中代替in 和not in 高效方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。