oracle 10g update的语法 更名成 Oracle的update语句优化研究

来源:互联网 发布:软件商店下载 编辑:程序博客网 时间:2024/06/10 21:41

 

一、        update语句的语法与原理
 
1.    语法
单表:UPDATE表名称 SET列名称 =新值 WHERE列名称 =某值
如:update t_join_situationset join_state='1'whereyear='2011'
更新年度为“2011”的数据的join_state字段为“1”。如果更新的字段加了索引,更新时会重建索引,更新效率会慢。
  多表关联,并把一个表的字段值更新到另一个表中的字段去:
update表a set a.字段1 = (select b.字段1 from 表b where a.字段2=b.字段2) where exists(select 1 from 表b where a.字段2=b.字段2)  
oracle的更新语句不通MSSQL那么简单易写,就算写出来了,但执行时可能会报
这是由于set哪里的子查询查出了多行数据值,oracle规定一对一更新数据,所以提示出错。要解决这样必须保证查出来的值一一对应。
2.    原理
Update语句的原理是先根据where条件查到数据后,如果set中有子查询,则执行子查询把值查出来赋给更新的字段,执行更新。
如:
update表a set a.字段1 = (select b.字段1 from 表b where a.字段2=b.字段2)
where exists(select 1 from 表b where a.字段2=b.字段2)。
查表a的所有数据,循环每条数据,验证该条数据是否符合exists(select 1 from 表b where a.字段2=b.字段2)条件,
如果是则执行(select b.字段1 from表b where a.字段2=b.字段2)查询,查到对应的值更新a.字段1中。关联表更新时一定要有exists(select 1 from 表b where a.字段2=b.字段2)这样的条件,否则将表a的其他数据的字段1更新为null值。
 
 
引用http://chenxy.blog.51cto.com/729966/811672
原创粉丝点击