- 浏览: 140184 次
- 性别:
- 来自: 上海
文章分类
最新评论
在表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据。象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语法,可以通过两种写法实现同样的功能:
1:子查询UPDATE A SET A.NAME=(SELECT B.NAME FROM B WHERE B.ID=A.ID),本查询要根据具体情况看看是否变通成如下
(1)单列
UPDATE A
SET A.NAME=(SELECT B.NAME FROM B WHERE B.ID=A.ID)
WHERE A.ID IN (SELECT ID FROM B);
(2)多列
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')
2:利用视图来做
UPDATE (SELECT A.NAME ANAME,B.NAME BNAME FROM A,B WHERE A.ID=B.ID)
SET ANAME=BNAME;
例如:
UPDATE tablea a
SET a.fieldforupdate = (SELECT b.fieldsource FROM tableb b WHERE a.keyfield = b.keyfield)
WHERE EXISTS (SELECT b.fieldsource FROM tableb b WHERE a.keyfield = b.keyfield)
有三点需要注意:
1. 对于一个给定的a.keyfield的值,SELECT b.fieldsource FROM tableb b WHERE a.keyfield = b.keyfield 的值只能是一个唯一值,不能是多值。
2. 在绝大多数情况下,最后面的where EXISTS子句是重要的,否则将得到错误的结果。
3. 对于视图更新的限制:
如果视图基于多个表的连接,那么用户更新(update)视图记录的能力将受到限制。除非update只涉及一个表且视图列中包含了被更新的表的整个主键,否则不能更新视图的基表。
补充:
delete from 多表关联列子
delete from t2 where exists(select 1 from t1 where t1.num = t2.num and t1.num = '123456');
发表评论
-
(转)《阿里巴巴数据库标准操作手册》目录
2012-04-18 14:59 1912转自:http://www.alidba.net/ ... -
(转)利用dbms_metadata.get_ddl查看DDL语句
2012-02-29 15:42 1067来源:http://www.cnblogs.com ... -
(转)Oracle数据库的自动导出备份脚本(windows环境)
2011-12-30 13:53 1420转自Oracle数据库的自动导出备份脚本(windows环境 ... -
oracle 10g 修改SGA,PGA大小
2011-11-12 11:42 1158一、概念SGA指系统全局区域(System Global ... -
(转)alter system 中SCOPE的含义
2011-11-12 11:41 1172■哪些参数可以用Alter System修改alter ... -
(转)详解:数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名及手工脚本创建oracle数据库
2011-11-07 16:08 619数据库名、实例名、数据库域名、全局数据库名、服务名 ,这是 ... -
ORACLE EM的删除与创建(转)
2011-09-08 13:11 3334手动删除ORACLE 10G EM 使用emca可以手动配 ... -
Oracle10g SCHEDULE job
2011-09-06 17:10 1267BEGIN SYS.DBMS_SCHEDULER.CRE ... -
oracle orion用法(IO压力测试)
2011-09-06 13:46 3784orion--oracle公司提供的IO存储测试软件 o ... -
oracle SQL性能优化(转)
2011-09-06 09:33 659(1) 选择最有效率的表名顺序(只在基于规则的 ... -
Oracle客户端精简绿色版
2011-08-31 17:19 913大型项目开发中,常 ... -
(转)Oracle的RAC环境下SYS密码修改
2011-08-31 02:31 6456sys是数据库库中权限最高的用户,在登录时,我们可以用os认证 ... -
oracle中imp命令详解(转)
2011-08-30 10:09 1044Oracle的导入实用程序(Import utili ... -
ORACLE日期问题
2011-08-30 02:09 8501、转换函数 与date操作关系最大的 ... -
OEM乱码解决方法
2011-08-29 21:35 1150方法1:(推荐使用这个方法)打开IE浏览器, 选择'工具&qu ... -
RAC启动dbconsole报错
2011-08-29 21:24 1038RAC启动dbconsole 抛出一个错误 [ora ...
相关推荐
数据库oracle锁: for update of和for update的区别,解释得很清楚,有很多详细例子说明。
例如: 两表(多表)关联update -- 仅在where字句中的连接 --这次提取的数据都是VIP,且包括新增的,所以顺便更新客户类别 update customers a -- 使用别名 set customer_type='01' --01 为vip,00为普通 where ...
shell连接oracle数据库工具脚本:支持select/insert/update/delete 部署位置:/root/sysmonitor db:数据库文件夹 dbconfig.properties:数据库配置文件, dbConnectTest.sh:连接测试文件 dbExecurteSQL.sh:...
一般来说update一个表, 使用where语句即可: 代码如下: UPDATE Ttest SET statusInd = ‘ACTIVE’ WHERE id = 123 注意: update 语句后面的table名称,是...FROM Tparent parent WHERE Ttest.id = 123 AN
SQL语句: Sql代码: 代码如下: SELECT * FROM hold_mc_site_product_pic pic WHERE pic.id = 730127 FOR UPDATE nowait 2、应用在多线程并发的情况下。先查询出要处理的数据,并加入数据库级的锁,处理完后,写入...
UPDATE 表2 SET 表2.C = (SELECT B FROM 表1 WHERE 表1.A = 表2.A) WHERE EXISTS (SELECT 1 FROM 表1 WHERE 表1.A = 表2.A); 尤其注意最后的外层where条件尤为重要,是锁定其批量更新数据的范围。 方法二: ...
两者一样,主要说说多表的更新 代码如下: Oracle> Oracle的多表更新要求比较严格,所以有的时候不是很好写,我们可以试试Oracle的游标 update ( select t.charger_id_ new_charger_id_ from t_cus_year_status t...
Missing artifact com.oracle:ojdbc6:jar:11.2.0.1.0问题解决 ojdbc包pom.xml出错 <!-- oracle数据库驱动 --> <groupId>com.oracle</groupId> <artifactId>ojdbc6 <version>11.2.0.1.0 1.首先确定你...
ORACLE应用中常见的傻瓜问题1000问 <br> 14. 如何查看系统被锁的事务时间? <br> select * from v$locked_object ; <br> 15. 如何以archivelog的方式运行oracle。 <br> init.ora <br> log_...
static LRD_VAR_DESC NUM ={LRD_VAR_DESC_EYECAT, 10, 32, LRD_DBTYPE_ORACLE, {1, 1, 0},DT_LONG_VARCHAR}; //下面这些句柄等变量的申请都可以照着帮助中的例子写 /***************** 这里省略了,具体见附件 */ ...
(1) 了解Oracle的工作环境和基本使用方法。 (2) 练习标准SQL的数据操作,查询命令及其查询优化。 (3) 学会使用高级SQL命令,排序、分组、自连接查询等。 (4) 学会使用SQL*PLUS命令显示报表,存储到文件等。 【实验...
Using a Subquery in the FROM Clause 4-10 Scalar Subquery Expressions 4-11 Scalar Subqueries: Examples 4-12 Correlated Subqueries 4-14 Using Correlated Subqueries 4-16 Using the EXISTS Operator 4-18 ...
Oracle锁表常用sql语句: select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ...select * from tc_daily_quotation for update; select * from tc_Pre_Contract_Bail for update;
ORACLE用户是学习ORACLE数据库中的基础知识,下面就介绍下类系统常用的默认ORACLE用户: 1. sys用户:超级用户,完全是个SYSDBA(管理数据库的人)。拥有dba,sysdba,sysoper等角色或权限。是oracle权限最高的用户,...
String sql="select * from T_USERS"; String sql1 = "insert into T_USERS values ('rrr','ooo')"; String sql2 ="update T_USERS set USERSPASSWORD = '888888888884444' where USERSNAME= 'www'"; ...
她是Oracle ACE,也是OakTable(Oracle社区中著名的“Oracle科学家”的非正式组织)的成员,经常在技术会议上演讲。她的著作还包括 Expert Oracle Practices和Beginning Oracle SQL,博客主页是karenmorton....
1.5.1 FROM子句 9 1.5.2 WHERE子句 11 1.5.3 GROUP BY子句 11 1.5.4 HAVING子句 12 1.5.5 SELECT列表 12 1.5.6 ORDERBY子句 13 1.6 INSERT语句 14 1.6.1 单表插入 14 1.6.2 多表插入 15 1.7 UPDATE语句 17 1.8 ...
4、索引高度:索引高度是指由于数据行的插入操作而产生的索引层数,当表中添加大量数据时,oracle将生成索引的新层次以适应加入的数据行,因此,oracle索引可能有4层,但是这只会出现在索引数中产生大量插入操作的...
A、获取top前10个Oracle的进程,并打印出(根据实际进程情况列出 R/S 状态) B、对这些进行进行PS检查资源占有情况,并确定是那个数据库实例的进程 C、根据当前目录下的connect.json配置数据库连接数据库访问,打印...