亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

oracle 中 in 的用法

oracle 中 in 的用法

哈尼露易絲 2016-06-15 08:50:56
oracle 中 in 的用法,感覺不是很理解
查看完整描述

2 回答

?
qyy2499760117_葉子

TA貢獻188條經驗 獲得超91個贊

EXISTS的執行流程
select * from t1 where exists ( select null from t2 where y = x )
可以理解為:
for x in ( select * from t1 )loop
if ( exists ( select null from t2 where y = x.x )
then
OUTPUT THE RECORD
end if
end loop
對于in和exists的性能區別:
如果子查詢得出的結果集記錄較少,主查詢中的表較大且又有索引時應該用in,反之如果外層的主查詢記錄較少,
子查詢中的表大,又有索引時使用exists。其實我們區分in和exists
主要是造成了驅動順序的改變(這是性能變化的關鍵),如果是exists
,那么以外層表為驅動表,先被訪問,如果是IN,那么先執行子查詢,所以我們
會以驅動表的快速返回為目標,那么就會考慮到索引及結果集的關系了
另外IN時不對NULL進行處理如:
select 1 from dual where null
in (0,1,2,null)
為空
2.NOT IN與NOT EXISTS:
NOT EXISTS的執行流程
select .....from rollup R where not exists ( select 'Found' from title T where R.source_id = T.Title_ID);
可以理解為:
for x in ( select * from rollup )loop
if ( not exists ( that query ) ) then
OUTPUT
end if;
end;


注意:NOT EXISTS與NOT IN不能完全互相替換,看具體的需求。如果選擇的列可以為
空,則不能被替換。

?

查看完整回答
2 反對 回復 2016-06-15
  • 2 回答
  • 0 關注
  • 3336 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號