



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一条 Update 更新语句是不能更新多张表的,除非使用触发器隐含更新。而表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据。我们先来讨论根据其他表数据更新你要更新的表一、MSSQLServer 多表关联更新sqlserver提供了update的from子句, 可以将要更新的表与其它的数据源连接起来。虽然只能对一个表进行更新,但是通过将要更新的表与其它的数据源连接起来,就可以在update 的表达式中引用要更新的表以外的其它数据。一般形式:updateASET 字段 1=8 表字段表达式, 字段 2=B 表字段表达式 fromBWHERE 逻辑表达式例如:UPDATEdbo.T
2、able2SETdbo.Table2.ColB=dbo.Table2.ColB+dbo.Table1.ColBFROMdbo.Table2INNERJOINdbo.Table1ON(dbo.Table2.ColA=dbo.Table1.ColA);实际更新的操作是在要更新的表上进行的,而不是在 from 子句所形成的新的结果集上进行的二、Oracle 多表关联更新Oracle 没有 updatefrom 语法,可以通过两种实现方式:1、利用子查询:updateASET 字段 1=(select 字段表达式 fromBWHERE.),字段 2=(select 字段表达式 fromBWHERE.)
3、WHERE 逻辑表达式UPDAT 多个字段两种写法:写法一:UPDATEtable_1aSETcol_x1=(SELECTb.col_y1,b.col_y2FROMtable_2bWHEREb.col_n=a.col_m),col_x2=(SELECTb.col_y2FROMtable_2bWHEREb.col_n=a.col_m)WHEREEXISTSELECT*FROMtable_2bWHEREb.col_n=a.col_m)或UPDATEtable_1aSETcol_x1=(SELECTb.col_y1,b.col_y2FROMtable_2bWHEREb.col_n=a.col_m),
4、col_x2=(SELECTb.col_y2FROMtable_2bWHEREb.col_n=a.col_m)WHEREa.col_m=SELECTb.col_nFROMtable_2bWHEREb.col_n=a.col_m)写法二:UPDATEtable_1aSET(col_x1,col_x2)=(SELECTb.col_y1,b.col_y2FROMtable_2bWHEREb.col_n=a.col_m)WHEREEXISTSELECT*FROMtable_2bWHEREb.col_n=a.col_m);或UPDATEtable_1aSET(col_x1,col_x2)=(SELECT
5、b.col_y1,b.col_y2FROMable_2bWHEREb.col_n=a.col_m)WHEREa.col_m=SELECTb.col_nFROMtable_2bWHEREb.col_n=a.col_m)注意:1.对于子查询的值只能是一个唯一值,不能是多值。2. 子查询在绝大多数情况下,最后面的 whereEXISTS 子句是重要的,否则将得到错误的结果。且 whereEXISTS 子句可用另一方法代替,如上。最后的子句是对 a 表被更新记录的限制,如无此句,对于 a 表中某记录,如在 b 表中关联不到对应的记录,则该记录被更新字段将被更新为 null。whereEXISTS 子句
6、就是排除对 a 表中该情况的记录进行更新。2、利用视图:UPDATE(SELECTA.NAMEANAME,B.NAMEBNAMEFROMA,BWHEREA.ID=B.ID)SETANAME=BNAME;注意:1.对于视图更新的限制:如果视图基于多个表的连接, 那么用户更新(update)视图记录的能力将受到限制。 除非 update 只涉及一个表且视图列中包含了被更新的表的整个主键,否则不能更新视图的基表。另外,Oracle 中的 Delete 的 from 子句也没有多表联接的功能,只能通过子查询的方式来做:deletefrom 表 Awhereexists(select*from 表 Bw
7、here 表 A.empid表 B.empid)deletefrom 表 Awhere 表 A.empidin(selectempidfrom 表 B)三、oracle 视图多表更新在。racle 中通常如果视图的数据源来自单表则该视图可以进行更新。而如果视图数据源来自两个以上表时这个视图是不可更新的。但有时候为了操作的方便我们更希望能够对多表视图也进行更新。这时候我们可以通过建立更新触发器来替代该视图原有更新以达到多表更新的效果例如:1.1 创建测试数据表-创建测试表DropTablet1;DropTablet2;createtablet1(t11numeric(28),t12varchar
8、2(20);createtablet2(t11numeric(28),t22varchar2(20);1.2 多表视图范例-创建测试视图createOrReplaceviewtasselectT1.t11f1,T1.t12f2,T2.t22f3fromT1,T2WhereT1.t11=T2.t11;1.3 多表视图触发器范例-创建视图的替代触发器CreateOrReplaceTriggerTrg_InsUpdDel_tInsteadOfInsertorupdateordeleteontforeachrowDeclarebeginIfInsertingThenInsertIntot1(t11,t12)Values(:New.f1,:New.f2);InsertIntot2(t11,t22)Values(:New.f1,:New.f3);elsifUpdatingThenUpdatet1sett11=:New.f1,t12=:New.f2wheret11=:New.f1;Upd
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 解除劳动关系协议书
- 集合篇-2024年单招数学专项复习试题答案和解析
- 专升本思政理论考查试题及答案详解
- (高清版)DB12∕T 696-2016 天津市名牌产品评价准则
- 教研组活动总结08
- 2025年课程视频授权使用合作协议
- 2025年解聘书及解聘合同模板
- 思政重要问题的试题及答案汇编
- 二零二五年度家庭装修质保与家居软装配饰合同
- 2025年度离婚协议书:共同财产分割与家庭债务清理
- 工作的时效性与时间管理课件
- 年产10万吨聚氯乙烯生产工艺设计毕业设计
- 高中18岁成人仪式主题活动设计
- 《婚姻家庭纠纷调解》课件
- 高中数学培优讲义练习(必修二):专题8.1 基本立体图形(重难点题型精讲)(教师版)
- 兵团红色经典文化在新疆高校思想政治教育中的运用研究
- 《珠穆琅玛峰》课件
- 注塑机定期保养记录表2016
- 3.28百万农奴解放纪念日演讲稿
- 全科医学科疾病诊疗指南全集诊疗规范
- 安全教育教程大学生安全教育PPT完整全套教学课件
评论
0/150
提交评论