Oracle語句中IN和=的區別有哪些
Oracle語句中IN和=的區別有:
1、首先應用范圍不一樣:in 可以理解為是范圍內的選擇;= 只有一個。例如:
select sno, sname from t1 where sno in ('sn1001','sn1002');
select sno, sname from t1 where sno in ('sn1001');
select sno, sname from t1 where sno ='sn1001';
select sno, sname from t1 where sno in (select sno from t2); --子查詢結果可以不止一個結果
select sno, sname from t1 where sno =(select sno from t2); --子查詢結果只能有一個。
2、其次性能也不一樣;=的性能大于in的性能,因為=能較好的使用索引等。
3、in 表示在一個結合內進行查詢,比如 select * from character where letter in ('A','B','C')。
=的作用就是一個值的比較。但是等號也可以實現in的效果,只是寫起來比較麻煩。比如上面的例子,也可以這樣寫:
select * from character where letter='A' or letter='B' or letter='C'.
兩個運算符都比較常用,根據具體的情況選擇。
oracle ,IN的改寫
1、增加索引,對*、*和*字段都增加索引。
2、不要用IN,用EXITS :
update y set *=(select * from c where *=*) where exits (select 1 from t where * = * );
效率會比用IN的語句高。如果例子中C表和T表是同一個表,建議增加篩選之更新那些ZT字段不相同的數據,這樣會提高一些效率。
3、使用游標分批次的修改數據,因為一個UPDATE更新的數據量過大,會導致大量的回滾段占用,分批次更新可以更好的利用資源。而且可以控制在一次更新中斷后從中斷的位置繼續向下更新。避免更新失敗等問題發生;
4、使用臨時表,把需要更新的數據篩選出來,再編寫更新語句,這只是3或者4的一種變化而已。看個人習慣,這么做的優點是可以把臨時表的數據作為一個備份,避免以后數據變化后無法得知當初的更新結果。
怎么在oracle的查詢語句中的in后用變量
要想在in中用變量,需要用動態SQL,請看下例子,我在oracle 10g中測試通過:
declare
v_1 varchar2(100);
v_2 varchar2(200);
begin
v_1:='(''1'',''2'',''3'')';
v_2:='insert into testa2 select * from testa1 where fch in'|| v_1;
execute immediate v_2;
commit;
end;
轉載請注明出處華閱文章網 » oraclein語句