博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DB2 UPDATE 语句
阅读量:4049 次
发布时间:2019-05-25

本文共 1527 字,大约阅读时间需要 5 分钟。

----start

我估计,只要是知道SQL语句的人都会用UPDATE语句,可是大部分人不知道UPDATE语句有两种写法,首先,考虑下面的情况:

 

假设让你更新一下张三的生日,很简单,我们可以这么写:

 

除此之外,我们还可以这么写:

 

就上面这个例子而言,通常我们不会使用第二种写法,因为这种写法可读性不如第一种写法好,下面我们举一个用第一种方法办不到得例子,可是用第二种方法却非常简单(这是一个生产环境实际的例子,通常用在银行中,关于表定义,我做了简化),考虑如下情况:

 

对于上面表的流水号(SEQ)字段,每个顾客从1开始,而且它的顺序,其实就是处理日(PROCESSDATE)排序后的顺序。细心的朋友可能已经发现,这样设计明显违反了表的第二范式,造成数据冗余。确实是这样的,为什么要这样设计呢?真实的原因我也不知道,只能问该系统的设计者。我猜测可能的原因是,系统的设计者将银行用的纸质报表直接转化为了数据库中的表,纸质报表有流水号(SEQ)字段是可以的,因为纸质报表我们无法排序,也不可能让会计去数每个顾客到底发生了多少交易,但是在数据库的表中,该字段则完全没有必要,因为我们可以通过对处理日(PROCESSDATE)排序后产生该结果。相反,如果设置流水号(SEQ)字段,就有可能因为这样那样的问题导致流水号(SEQ)和处理日(PROCESSDATE)排序结果不一致,这时候就要求我们更新流水号(SEQ),那么,我们该怎么更新呢?这个问题很好解决,通常我们会将查询结果排序后,更新其中的每一条记录。这样做是可以的,但是有点笨,我们能不能用一条语句来更新呢?答案是可以的,如下:

 

怎么样,是不是很简单。通过以上的分析,你可能对UPDATE语句的两种方法有一定的了解。如果你对上面语句的ROW_NUMBER() OVER()还不熟悉,请参见:

---更多参见:

----声明:转载请注明出处。

----last updated on 2010.1.9

----written by ShangBo on 2010.1.9

----end

 

你可能感兴趣的文章
S3C2440中对LED驱动电路的理解
查看>>
《天亮了》韩红
查看>>
Windows CE下USB摄像头驱动开发(以OV511为例,附带全部源代码以及讲解) [转]
查看>>
模拟屏学习资料_什么是PAL制式
查看>>
模拟屏学习资料_模拟视频 入门
查看>>
西藏之旅
查看>>
Oracle中定时执行问题
查看>>
三时业
查看>>
佛教三宝-三皈依
查看>>
杂阿含经喻世间有四等马
查看>>
考研前夜涂笔
查看>>
英语复试自我介绍
查看>>
什么是熵?
查看>>
拼凑、摘抄-评李代平的软件工程第二版
查看>>
误传了数千年的几个名句
查看>>
韩复榘经典语录
查看>>
厅、部、局、司区分大小
查看>>
VS2005中使用C#编写MDI窗口根据子窗口个数控制菜单项的enabled属性
查看>>
北川邓家“刘汉小学”无一死亡奇迹背后的真相
查看>>
救灾,从来没有胜利
查看>>