Access/VBA/Excel-两个表联合查询左连接-11
2018-01-17 22:28
639 查看
微信公众号原文
系统:Windows 7
软件:Excel 2010 / Access 2010
这个系列开展一个新的篇章,重点关注Access数据库
主体框架:以Excel作为操作界面,Access作为数据库
今天讲讲如何将数据库中满足要求的数据拿出来
涉及知识:
学生信息表
运行过程
获取学号为1101学生在不同年级的语文成绩,输出信息包括:姓名,学号,性别,年级,语文成绩
最终想要获得的信息来自于两个工作表,所以需要连接查询
逻辑过程
连接数据库
根据需求确定SQL语句
执行SQL语句,得到recordset
将recordset写入工作表(字段名+所有记录 即 列名+每一行)
断开与数据库的连接
SQL语句
代码截图
执行结果
本问题中,相关变量取值后SQL语句如下
Select 姓名,成绩表.学号,性别,年级,语文成绩 from (成绩表 left join 学生信息表 on 成绩表.学号=学生信息表.学号) where (成绩表.学号=1101)
中文解读:从成绩表和学生信息表连接表中获取学号为1101的学生信息
两个表进行连接,以左侧为基准,即这里的表1
连接条件:表1与表2的ID号相同
当表2中满足表1中ID条件的有多条记录,那么进行分别匹配
当表2中没有满足表1中ID的条件时,匹配Null
例1:匹配多个,修改学生信息表,增加同样学号的
例2:若未匹配上,则对应信息为空
本文为原创作品,如需转载,可加小编微信号
以上为本次的学习内容,下回见
如发现有错误,欢迎留言指出
更多精彩,请关注微信公众号
扫描二维码,关注本公众号
系统:Windows 7
软件:Excel 2010 / Access 2010
这个系列开展一个新的篇章,重点关注Access数据库
主体框架:以Excel作为操作界面,Access作为数据库
今天讲讲如何将数据库中满足要求的数据拿出来
涉及知识:
ADO,
SQL:left join
Part 1:目标
成绩表学生信息表
运行过程
获取学号为1101学生在不同年级的语文成绩,输出信息包括:姓名,学号,性别,年级,语文成绩
最终想要获得的信息来自于两个工作表,所以需要连接查询
逻辑过程
连接数据库
根据需求确定SQL语句
执行SQL语句,得到recordset
将recordset写入工作表(字段名+所有记录 即 列名+每一行)
断开与数据库的连接
SQL语句
"Select " & opFilds & " from " & "(" & tbls & ")" & " where (" & searchC & ")"
opFilds = "姓名," & tblNote & ".学号,性别,年级,语文成绩"
searchC = tblNote & ".学号=1101"
tbls = tblNote & " left join " & tblName & " on " & tblNote & ".学号=" & tblName & ".学号"
Part 2:代码
Sub test() Dim cnn As New ADODB.Connection '连接 4000 Dim rs As New ADODB.Recordset Dim SQL As String Dim tblName Dim dbAddr dbAddr = ThisWorkbook.Path & "\学生信息.accdb" tblName = "学生信息表" tblNote = "成绩表" '连接数据库 With cnn .Provider = "Microsoft.ACE.OLEDB.12.0" .Open "Data Source=" & dbAddr End With opFilds = "姓名," & tblNote & ".学号,性别,年级,语文成绩" searchC = tblNote & ".学号=1101" tbls = tblNote & " left join " & tblName _ & " on " & tblNote & ".学号=" & tblName & ".学号" SQL = "Select " & opFilds & " from " & "(" & tbls & ")" & " where (" & searchC & ")" Set rs = cnn.Execute(SQL) Dim sht Dim fildNum Set sht = ThisWorkbook.Worksheets("示例") sht.Cells.ClearContents fildNum = rs.Fields.Count For j = 0 To fildNum - 1 Step 1 fildName = rs.Fields(j).Name sht.Cells(1, j + 1) = fildName Next j sht.Cells(2, 1).CopyFromRecordset rs cnn.Close Set rs = Nothing Set cnn = Nothing End Sub
代码截图
执行结果
Part 3:部分代码解读
SQL = "Select " & opFilds & " from " & "(" & tbls & ")" & " where (" & searchC & ")"
本问题中,相关变量取值后SQL语句如下
Select 姓名,成绩表.学号,性别,年级,语文成绩 from (成绩表 left join 学生信息表 on 成绩表.学号=学生信息表.学号) where (成绩表.学号=1101)
中文解读:从成绩表和学生信息表连接表中获取学号为1101的学生信息
表1 left join 表2 on 表1.ID=表2.ID
两个表进行连接,以左侧为基准,即这里的表1
连接条件:表1与表2的ID号相同
当表2中满足表1中ID条件的有多条记录,那么进行分别匹配
当表2中没有满足表1中ID的条件时,匹配Null
例1:匹配多个,修改学生信息表,增加同样学号的
例2:若未匹配上,则对应信息为空
本文为原创作品,如需转载,可加小编微信号
learningBin
以上为本次的学习内容,下回见
如发现有错误,欢迎留言指出
更多精彩,请关注微信公众号
扫描二维码,关注本公众号
相关文章推荐
- Access/VBA/Excel-12-模糊查询
- excel vba进行SQL查询几个连接情况
- Access/VBA/Excel-16- 连接带密码的数据库
- oracle将两个结果连接后进行查询,得到两个查询的联合结果
- [办公自动化] 再读《让EXCEL飞》(从excel导入access数据时,union联合查询,数据源中没有包含可见的表格)
- 用Python语言实现将两个Excel文件完成类似SQL中内连接查询的合并操作
- Access 2007/2010 VBA查询结果导出为Excel 2007文件
- 11-04 SQLserver基础--连接查询、联合查询、索引
- vba连接数据 代码 (excel/access/sqlserver)
- Oracle SQL基础之(二) [联合查询、union、子查询、外、内连接、复制表]
- Excel VBA讀取Access
- Access 查询同一张表中两个或以上字段含有重复项的记录
- Access/VBA/Excel-06-Access记录删除
- 两个sql查询语句之间的左连接left join
- Oracle中的联合查询-自然连接/外连接/内连接
- MySQL高级查询之连接查询、联合查询、子查询
- 两个表不能连接查询需要把数据放在一起
- SP_addlinkedserver 远程连接 (oracle,sql server,access,excel)
- Access/VBA/Excel-13-嵌套查询
- Access/VBA/Excel-14-消除重复值