oraclein语句的⽤法,oraclein语句
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); --⼦查询结果可以不⽌⼀个结果oracle游标的使用
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、增加索引,对c.NO、y.NO和t.NO字段都增加索引。
2、不要⽤IN,⽤EXITS :
update y =( from c where c.NO=y.NO) where exits (select 1 from t where t.NO = y.NO );
效率会⽐⽤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;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论