`

Oracle 几种更新(Update语句)查询的方法

 
阅读更多

数据库更新就一种方法Update,
其标准格式:Update 表名 set 字段=值 where 条件
不过根据数据的来源不同,还是有所区别的:

 
1.从外部输入
这种比较简单
例:update tb set UserName="XXXXX" where UserID="aasdd"

2.一些内部变量,函数等,比如时间等
直接将函数赋值给字段
update tb set LastDate=date() where UserID="aasdd"

3.对某些字段变量+1,常见的如:点击率、下载次数等
这种直接将字段+1然后赋值给自身
update tb set clickcount=clickcount+1 where ID=xxx

4.将同一记录的一个字段赋值给另一个字段
update tb set Lastdate= regdate where XXX

5.将一个表中的一批记录更新到另外一个表中
table1 
ID f1 f2
table2 
ID f1 f2
先要将table2中的f1 f2 更新到table1(相同的ID)

update table1,table2 set table1.f1=table2.f1,table1.f2=table2.f2 where table1.ID=table2.ID

6.将同一个表中的一些记录更新到另外一些记录中
表:a
ID   month   E_ID     Price
1       1           1        2
2       1           2        4
3       2           1         5
4       2           2        5
先要将表中2月份的产品price更新到1月份中
显然,要找到2月份中和1月份中ID相同的E_ID并更新price到1月份中
这个完全可以和上面的方法来处理,不过由于同一表,为了区分两个月份的,应该将表重命名一下
update a,a as b set a.price=b.price where a.E_ID=b.E_ID and a.month=1 and b.month=2 

当然,这里也可以先将2月份的查询出来,在用5.的方法去更新 

update a,(select * from a where month=2)as b set a.price=b.price where a.E_ID=b.E_ID and a.month=1

 

 

 

 

 

 

多表关联UPDATE

假设有两个表A和B,A表字段a,b,c,d,B表字段b,e,f,两表的关联条件是字段b,现在想做个data patch,欲将B表中的字段e的值patch给A表的字段c.

有如下两种方法:

update A set A.c=(select e from B where B.b=A.b)
where exists(select 1 from B where B.b=A.b);

 

merge into A
using B
on (A.b=B.b)
when matched then update set A.c=B.e;

 上面两种方法都可以实现多表联结的更新,其中的B表也可以是子查询,视图。

merge into是oracle 9i之后添加的语法,可以实现update/insert的功能(满足条件更新,不满足条件插入),而且效率要高,因为用merge只需要一次全表扫描,但merge into的使用需要小心,必须理解它的用法才能放心使用,否则有可能出现问题。

 

上面的例子不仅仅可以更新单个字段,也可以更新多个字段,如下:

update A set A.c=(select e from B where B.b=A.b),
             A.d=(select f from B where B.b=A.b)
where exists(select 1 from B where B.b=A.b);



merge into A
using B
on (A.b=B.b)
when matched then update set A.c=B.e,
                             A.d=B.f;

 

 

 

 

分享到:
评论

相关推荐

    Oracle中在pl/sql developer修改表的2种方法

    select * from student for update student表需要操作人修改完commit之后才可以做其他的操作,否则该表会被锁住。   二、方式二 select t.*,t.rowid from student t 在pl/sql developer中右击某表,显示的就是该...

    Oracle并行操作之并行查询实例解析

    Oracle数据库的并行操作特性,其本质上就是强行榨取除数据库服务器空闲资源(主要是CPU资源),对一些高负荷大数据量数据进行分治处理。并行操作是一种非确定性的优化策略,在选择的时候需要小心对待。目前,使用...

    oracle实验报告

    (1) 了解Oracle的工作环境和基本使用方法。 (2) 练习标准SQL的数据操作,查询命令及其查询优化。 (3) 学会使用高级SQL命令,排序、分组、自连接查询等。 (4) 学会使用SQL*PLUS命令显示报表,存储到文件等。 【实验...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    SQL(Structured Query Language)结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。同时也是数据库脚本文件的扩展名。  SQL语言主要包含5个部分  数据定义...

    Oracle11g从入门到精通2

    10.7 几种备份与恢复方法的比较 第11章 控制文件及日志文件的管理 11.1 控制文件 11.1.1 控制文件概述 11.1.2 多路复用控制文件 11.1.3 控制文件的创建 11.1.4 控制文件的备份与恢复 11.1.5 控制文件...

    Oracle11g从入门到精通

    10.7 几种备份与恢复方法的比较 第11章 控制文件及日志文件的管理 11.1 控制文件 11.1.1 控制文件概述 11.1.2 多路复用控制文件 11.1.3 控制文件的创建 11.1.4 控制文件的备份与恢复 11.1.5 控制文件的查询...

    oracle详解

    导入/导出是ORACLE幸存的最古老的两个命令行工具,其实我从来不认为Exp/Imp是一种好的备份方式,正确的说法是Exp/Imp只能是一个好的转储工具,特别是在小型数据库的转储,表空间的迁移,表的抽取,检测逻辑和物理...

    oracle Session与lock 解除

    ORACLE里锁有以下几种模式: 0:none 1:null 空 2:Row-S 行共享(RS):共享表锁 3:Row-X 行专用(RX):用于行的修改 4:Share 共享锁(S):阻止其他DML操作 5:S/Row-X 共享行专用(SRX):阻止其他...

Global site tag (gtag.js) - Google Analytics