根据字段查询语句_Excel VBA+ADO+SQL入门教程20:INSERT语句

点上方 关注我们 ,每日 学一点 ,每天进步一点点 52bc2a33d9ee589fb70529165e37f3b0.gif 关于SQL修改数据的语句,我们前两期聊了删和改; 还剩下的【增】,也就是INSERT语句; 今个就来说它。  1. 在SQL中,可以使用INSERT……VALUES语句直接向数据库中插入一行数据,其语法格式如下: INSERT INTO 表名 [(字段名1, 字段名2……)] VALUES(值1,值2……) 在VALUES后列出的数据,其位置必须和INTO后字段名的排列位置保持一致,也就是说第1个值必须对应第1个字段名,第2个值对应第2个字段名……以此类推。 不过,字段名是可以省略的; 当字段名省略时,默认读取插入表的所有字段名。 举个例子。 如下图所示,是一份名为‘工资表’的Excel表格。 8f8f1da7abe6c3f4889b6f885bfc000b.png            假设我们现在需要在该表新增一条记录,姓名是‘萧才人’,性别是‘女’,工龄为1,工资3000。 INSERT INTO [工资表$] VALUES('萧才人','女',1,3000) 语句省略了字段名,默认读取工资表的所有字段名,也就是姓名、性别、工龄和工资,VALUES列出的数据('萧才人','女',1,3000)和字段名一一对应; 语句执行结果如下所示: 1854dc7728477fa97a31ed29fb7c5169.png            再比如我们需要插入一行数据,但只知道姓名是’李麻花’,女生,1年工龄,工资未知。 倘若我们将语句写成如下: INSERT INTO [工资表$] VALUES('萧才人','女',1) 执行后会得到错误提示: ae0a3c5d36f9a30864525b3855e7e4fc.png            由于该语句省略了字段名,也就默认读取工资表的所有的4个字段名,但VALUES只提供了3个数据,因此会得到‘查询值的数目和目标字段中的数据不同“的错误提示。 语句可以修改如下: INSERT INTO [工资表$] VALUES('萧才人','女',1,null) 也可以写成如下: INSERT INTO [工资表$] (姓名,性别,工龄) VALUES('萧才人','女',1) 该语句提供了字段名,因此只插入指定字段名的数据。 需要说明的是,指定字段名的排列顺序不必和插入表的字段名排列顺序一致,也就是说,上面的语句也可以写成: INSERT INTO [工资表$] (性别,姓名,工龄) VALUES('女','萧才人',1) 语句执行结果如下图所示: 97a46a3acc48b973e3b6f9821fbe8c5f.png           

 2,

INSERT……INTO语句很有用,但它每次只能对数据库插入一行记录,当有多行数据需要插入时,我们还需要搭配VBA的循环语句等,虽能解决问题,但未免不够高效。 通过INSERT……SELECT语句,我们可以将一个表上的多行数据插入到另外一个指定表中。 语法格式如下: INSERT INTO 表名1 [(字段名1, 字段名2……)] SELECT 字段名1,字段名2……FROM 表名2 依然举个例子。 下图是一份名为‘试用期’的表格。 5bcdf1d3621f2d79d3c19cc84d5745bf.png            现在,我们需要将考核为‘合格’的人名及对应的数据,新增到‘工资表’中。 INSERT INTO [工资表$] SELECT 姓名,性别,工龄,工资 FROM [试用期$] WHERE 考核='合格' 语句执行结果如下图所示。 43d52fa3584d70f49a8d7800489b9436.png            SELECT语句从‘试用期’的表格筛选出考核为‘合格‘的数据,并将其插入到工资表中。 INSERT INTO后的字段名做了省略处理,当省略该处字段名时,和INSERT……VALUES所不同的是,默认读取的不是插入表的字段名,而是 SELECT语句查询结果表的字段名。 比如,以下语句,尽管SELECT语句的字段名排列顺序和工资表的字段名排列顺序不同,但数据插入位置并不会出错。 INSERT INTO [工资表$]  SELECT 姓名,工龄,工资,性别 FROM [试用期$] WHERE 考核='合格' 再比如,以下语句,由于工资表并不存在考核列,因此会收到错误提示。 INSERT INTO [工资表$]  SELECT 姓名,工龄,工资,性别,考核 FROM [试用期$] WHERE 考核='合格' 026522fcdb59e956227f5767214b580a.png            当然,当INSERT INTO后有指定的字段名时,以指定的字段名顺序为准。 INSERT INTO [工资表$] (姓名,工龄,工资,性别) SELECT 姓名,0,4000,性别 FROM [试用期$] WHERE 考核='合格' SELECT查询语句,放弃了‘试用期‘表3000的工资,更改为4000; 工龄也更改为0; 由于INSERT INTO语句后指定了字段名,0对应的是工龄,4000对应的字段名是工资; 因此语句执行后的结果如下图所示,并无错误: cb9b62c5699bbc6505c72d8d23b63209.png           

 3,

INSERT……SELECT语句可以将一张表的数据插入到指定表中,但前提是该指定表本身是存在的。 如果我们需要将查询数据插入到一张事先并不存在的表——可以使用SELECT……INTO语句。 语法如下: SELECT 字段名 INTO 新表名 FROM 数据来源表 该语句会根据指定表名和字段名创建一份新表,并将FROM子句的查询记录放置其中。 呃,但Excel并不支持该用法。 嘿~但ACCESS支持…… 比如,我们需要将一个Excel工作簿的所有工作表批量复制移动到ACCESS数据库中,可以使用以下代码。
Sub DoSql1()    Dim cnn As Object, strSQL As String    Dim sht As Worksheet, strShtName As String, strPath As String    Set cnn = CreateObject("adodb.connection")    strPath = ThisWorkbook.FullName '工作簿完整路径+名称    cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "/数据库.accdb"    '创建ACCESS数据库的连接    For Each sht In Worksheets '遍历工作表        strShtName = sht.Name '工作表的名称        strSQL = "SELECT * INTO " & strShtName & " FROM [Excel 12.0;DATABASE=" & strPath & "].[" & strShtName & "$]"        cnn.Execute (strSQL) '执行Sql语句    Next    cnn.Close '关闭连接    Set cnn = Nothing '释放cnn对象End Sub
代码通过遍历代码所在工作簿的工作表,将其数据整体复制移动到名称为‘数据库’的ACCESS文件中。 代码所使用的SQL代码如下: strSQL = "SELECT * INTO " & strShtName & " FROM [Excel 12.0;DATABASE=" & strPath & "].[" & strShtName & "$]" 变量strShtName是工作表的名称; [Excel 12.0;DATABASE=" & strPath & "].[" & strShtName & "$]"是ADO跨文件连接Excel工作簿的固定引用格式,可以参考第4篇:SQL查询中"表"技巧的总结 整个语句的意思就是获取(FROM)工作表的数据,在ACCESS中新增一个表,表名等同Excel工作表的名称,并将该表所有的字段记录(SELECT *)放置其中。 需要注意的是: 当ACCESS存在和Exce工作表同名的表时,代码会返回错误。

 4.

没了

本系列的SQL部分至此告一段落……

接下来我们会进入更加陌生的领域——ADO

握抓,致安,下次见

示例文件百度网盘:

https://pan.baidu.com/s/1x-PPNHHpcmCIAsud3GDUWQ

提取码:i65v

更多教程&练习

  • 001:零基础学Excel(一)什么是Excel?

  • 002:30个工作日后(含特定节假日)是哪天?

  • 003:连续区间查询的常用方法有哪些?


©看见星光 6c7648fc4a49037555d6f769d89ca6d6.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值