- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ExcelVBAADOSQL入门教程19:UPDATE更新语句
能不能让我陪着你走? 既然你说留不住你? 回去的路有些黑暗
1,
我们上一章留了个小尾巴,说对于EXCEL文件,SQL可以删除单元格内的值,但不能使用DELETE语句删除整条记录,或者说删除单元格自身;否则会收到错误提示——那么如何删除单元格内的值呢?
请使用UPDATE语句。
UPDATE,顾名思义,修改或更新数据库中的数据之意 ;它的基础语法如下:
UPDATE 表名 SET 列名称=新值
举个例子。夏天到了,酷暑难当,某公司决定为每位员工的工资增加200元防暑降温费。
? ? ? ? ?
SQL语句如下:
UPDATE ?[工资表$] SET 工资=工资 200
完整VBA代码如下:
Sub DoSql2()
Dim cnn As Object, strSQL? As String
Set cnn = CreateObject(adodb.connection)
cnn.Open Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source= ThisWorkbook.FullName
strSQL = UPDATE? [工资表$] SET 工资=工资 200
cnn.Execute (strSQL)
cnn.Close
Set cnn = Nothing
End Sub
更新后的数据如下:
? ? ? ? ?
但等到发工资前的晚上,半夜12点,领导辗转反侧后忽然改主意了。他认为男女应该区别对待,男生的防暑降温费应改为150,女生改为250……以为领导是照顾女同胞?不系滴,毕竟公司男多女少嘛,能省一点是一点。
对此,我们得将代码中的SQL语句修改如下:
UPDATE ?[工资表$] ?SET 工资=工资 IIF(性别=男,150,250)
语句使用IIF函数对性别进行判断,如果是男生,则返回数值150,否则返回250.
更新后的工资表如下图所示:
? ? ? ? ?
2.
再举几个常见的例子吧。
先看一个修改多列数据的小栗子。
? ? ? ? ?
假设,我们发现员工‘芬子师妹’这个人的性别弄错了,应该是女生;工龄也错了,应该是3年;工资还是错了,应该是6666——如何用UPDATE语句进行更新呢?
UPDATE ?[工资表$] SET 性别=女,工龄=3,工资=6666 WHERE 姓名=芬子师妹
语句通过WHERE子句指定更新条件,并在SET子句指定了多列应更新的数据,每列数据之间使用英文逗号间隔。
更新后的结果如下:
? ? ? ? ?
再看一个UPDATE搭配子查询的例子。
假设,有一天早晨,领导给了你一份名单,说这些人的工资每人加50元,同时工龄加1年。
名单表的名单如下:
? ? ? ? ?
如何根据名单对工资表做批量数据更新呢?
语句如下:
UPDATE ?[工资表$] SET 工龄=工龄 1,工资=工资 50 WHERE 姓名 IN (SELECT * FROM [名单表$A:A])
语句使用子查询的方式作为数据更新的条件,关于子查询:Excel VBA ADO SQL入门教程013:子查询
工资表数据更新后如下图所示:
? ? ? ? ?
最后举一个UPDATE关联查询更新的例子。
又过了一段时间,领导又给了您一份调薪表,要求你根据调薪表的人名和工资,对工资表对应的员工工资做批量修改。
调薪表的模样是下图酱紫的。
? ? ? ? ?
沉默50秒,我需要严肃思考一下,为什么我的工资从5700掉到了73块?说四川普通话的那位白头发老头贸易保护我了?还是俺和“看见月光”蒙面诈骗领导小女儿的事情暴露了?
……好伐,如何使用UPDATE语句对工资表做对应的数据更新呢?
UPDATE [工资表$] a INNER JOIN [调薪表$] b ON a.姓名=b.姓名 SET a.工资=b.工资
UPDATE子句通过内连接的查询方式指定了需要数据更新的记录行,并通过SET子句对工资修改为对应的新值。
不过需要说明的是,这是Excel和ACCESS (JET SQL)关联更新的写法,SQL SERVER(T-SQL)与此并不相同,后者的UPDATE是支持FROM子句的——打个响指,正如上文所言,两者之间的语句区别并不是本系列教程的重点,感兴趣的朋友可以自行百度。
更新后的工资表数据如下所示:
? ? ? ? ?
3.
好吧,亲爱的,回到我们最初的约定……
如何使用UPDATE语句批量删除单元格内的值?
比如批量删除工资表的工资……
其实很简单,对不对?
UPDATE [工资表$] SET 工资=NULL
? ? ? ? ?
但就像我们在上一章所说的,SQL能做的只是
文档评论(0)