Oracle- UPDATE FROM讲解

  在表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据。像sql server提供了update的from 子句,可以将要更新的表与其它的数据源连接起来。虽然只能对一个表进行更新,但是通过将要更新的表与其它的数据源连接起来,就可以在update的表达式中引用要更新的表以外的其它数据。
  例如:

UPDATE Table2
SET Table2.ColB = Table2.ColB + Table1.ColB
FROM Table2
INNER JOIN Table1
ON (Table2.ColA = Table1.ColA);

  实际更新的操作是在要更新的表上进行的,而不是在from子句所形成的新的结果集上进行的。
  Oracle没有update from语法,可以通过两种写法实现同样的功能:

  子查询UPDATE A SET A.NAME=(SELECT B.NAME FROM B WHERE B.ID=A.ID),本查询要根据具体情况看看是否变通成如下。

  

  单例:UPDATE A SET A.NAME=(SELECT B.NAME FROM B WHERE B.ID=A.ID)  WHERE A.ID IN (SELECT ID FROM B)
  多例:UPDATE order_rollup SET(qty,price)=(SELECT SUM(qty),SUM(price) FROM order_lines WHERE customer_id=‘KOHL‘ )WHERE cust_id=‘KOHL‘ AND order_period=TO_DATE(‘01-Oct-2000‘)

  还可以结合视图使用。

  

  有三点需要注意:
  1. 对于一个给定的a.keyfield的值,SELECT b.fieldsource FROM tableb b WHERE a.keyfield = b.keyfield 的值只能是一个唯一值,不能是多值。
  2. 在绝大多数情况下,最后面的where EXISTS子句是重要的,否则将得到错误的结果。
  3. 对于视图更新的限制:如果视图基于多个表的连接,那么用户更新(update)视图记录的能力将受到限制。除非update只涉及一个表且视图列中包含了被更新的表的整个主键,否则不能更新视图的基表。

  转截自:http://www.cnblogs.com/JasonLiao/archive/2009/12/23/1630895.html

时间: 2024-10-01 13:42:44

Oracle- UPDATE FROM讲解的相关文章

[转载]oracle游标概念讲解

原文URL:http://www.2cto.com/database/201203/122387.html ORACLE游标概念讲解 什么是游标?  ①从表中检索出结果集,从中每次指向一条记录进行交互的机制.      ②关系数据库中的操作是在完整的行集合上执行的.   由SELECT 语句返回的行集合包括满足该语句的WHERE 子句所列条件的所有行.由该语句返回完整的行集合叫做结果集.      应用程序,尤其是互动和在线应用程序,把完整的结果集作为一个单元处理并不总是有效的.      这些

Oracle Update 语句语法与性能分析 - 多表关联

Oracle Update 语句语法与性能分析 - 多表关联 为了方便起见,建立了以下简单模型,和构造了部分测试数据: 在某个业务受理子系统BSS中, SQL 代码 --客户资料表 create table customers ( customer_id number(8) not null, -- 客户标示 city_name varchar2(10) not null, -- 所在城市 customer_type char(2) not null, -- 客户类型 ... ) create

Oracle Update 数据

Client login 1.SQL Plus请求使用TCP/IP 连接 指定TNS服务名 如 ubuntu .Client process读取tnsnames.ora file 向指定的主机发送数据包 2. Server 端接受请求 监听器进程获取客户端发过来的TNS数据包.检查配置文件,符合配置则调用fork() 生成子进程 3. 子进程收集本进程所在的主机名.IP地址及进程号等信息,按照参数文件申请用一小块PGA内存. 4. 这时子进程在这里华丽的变身为Server process . 此

Oracle Update 一定还有你不知道的更新方式

Basic Update Statements The Oracle UPDATE statement processes one or more rows in a table and sets one or more columns to the values you specify. Update all records UPDATE <table_name>SET <column_name> = <value> CREATE TABLE test ASSELEC

oracle update语句

Oracle在表中更新数据的语法是: 语法结构:UPDATE操作 UPDATE 表名 SET 列名1=值,列名2=值-- WHERE 条件 代码演示:UPDATE操作 SQL> UPDATE INFOS SET CLASSNO='1002',STUADDRESS='山东莱芜' WHERE STUNAME='阮小二';

Oracle update和order by

今天遇到一个关于SQL转换成Oracle语句的问题,描述如下: select * from emp order by deptno; select * from dept; Sql Server: update dept a set dname=(select top 1 ename from emp where deptno=a.deptno order by sal) 经过尝试,查找资料,得出下面转换结果,不知道这样是否可行: update dept a set dname= (with t

Oracle Update TOP N Issue, 请专家解答

大家好 上周写了匿名方法一文,很多读者,很高兴,相信我们已经从大伙的回复中,对.NET又有了更深刻的认识. 好,现在说主题,各类数据库都有相应更新本表top n的方案.现在我一一举例 首先看表结构如下: 数据库以及表创建命令初始化数据库语句 1 CREATE TABLE student( 2 id varchar(256) NOT NULL, 3 name varchar(256) NULL, 4 age int NULL) 1 insert into student values('001',

oracle update优化

一.         update语句的语法与原理 1.     语法 单表:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 如:update t_join_situation set join_state='1'whereyear='2011' 更新年度为"2011"的数据的join_state字段为"1".如果更新的字段加了索引,更新时会重建索引,更新效率会慢. 多表关联,并把一个表的字段值更新到另一个表中的字段去: update 

ORACLE游标概念讲解

1,什么是游标? ①从表中检索出结果集,从中每次指向一条记录进行交互的机制. ②关系数据库中的操作是在完整的行集合上执行的.   由 SELECT 语句返回的行集合包括满足该语句的 WHERE 子句所列条件的所有行.由该语句返回完整的行集合叫做结果集.      应用程序,尤其是互动和在线应用程序,把完整的结果集作为一个单元处理并不总是有效的.      这些应用程序需要一种机制来一次处理一行或连续的几行.而游标是对提供这一机制的结果集的扩展.      游标是通过游标库来实现的.游标库是常常作

Oracle update+with的使用场景

drop table test purge; create table test( id number, code varchar(20), name varchar(20) ); insert into test values(1,'201401','aaa'); insert into test values(2,'201402','bbb'); insert into test values(3,'201402','ccc'); insert into test values(4,'201