HI,大家好,我是星光。 我们上一章留了个小尾巴,说对于EXCEL文件,SQL可以删除单元格内的值,但不能使用DELETE语句删除整条记录,或者说删除单元格自身;否则会收到错误提示——那么如何删除单元格内的值呢? 可以使用UPDATE语句。 UPDATE,顾名思义,修改或更新数据库中的数据之意 ;它的基础语法如下: 举个例子。夏天到了,酷暑难当,某公司决定为每位员工的工资增加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. 更新后的工资表如下图所示:
打个响指,再举几个常见的例子吧。 先看一个修改多列数据的小栗子。 假设,我们发现员工'芬子师妹’这个人的性别弄错了,应该是女生;工龄也错了,应该是3年;工资还是错了,应该是6666——如何用UPDATE语句进行更新呢? UPDATE [工资表$] SET 性别='女',工龄=3,工资=6666 WHERE 姓名='芬子师妹'
语句通过WHERE子句指定更新条件,并在SET子句指定了多列应更新的数据,每列数据之间使用英文逗号间隔。 更新后的结果如下:
再看一个UPDATE搭配子查询的例子。 假设,有一天早晨,领导给了你一份名单,说这些人的工资每人加50元,同时工龄加1年。 名单表的名单如下:
如何根据名单对工资表做批量数据更新呢? 语句如下: UPDATE [工资表$] SET 工龄=工龄+1,工资=工资+50 WHERE 姓名 IN ( SELECT * FROM [名单表$A:A])
语句使用子查询的方式作为数据更新的条件,关于子查询,可以参考本系列教程第13章:什么是子查询。 工资表数据更新后如下图所示:
最后举一个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子句的——打个响指,正如前文所言,两者之间的语句区别并不是本系列教程的重点,感兴趣的朋友可以自行百度。 更新后的工资表数据如下所示:
好吧,亲爱的,回到我们最初的约定…… 如何使用UPDATE语句批量删除单元格内的值? 比如批量删除工资表的工资…… 其实很简单,对不对? UPDATE [工资表$] SET 工资=NULL
但SQL能做的只是删除单元格的值,并不能删除单元格本身。 左上角点关注,右下角点个赞,赠人玫瑰,手有余香,咱们下期再见。 案例文件下载百度网盘..▼
https://pan.baidu.com/s/1jJ0q0ghoyc19x6H4IOPyDA 需要系统学习Excel,却找不到优质教程?学习Excel的过程中遇到疑难问题,却找不到人及时作出解答?加入我的付费社群,与4500+学员一起,同微软最有价值专家(MVP)全面精进表格之道👇👀 👇本文由公众号“Excel星球”首发。
|