美文网首页Excel 加油站
Access/VBA/Excel-两个表联合查询左连接-11

Access/VBA/Excel-两个表联合查询左连接-11

作者: Data_Python_VBA | 来源:发表于2017-12-15 20:11 被阅读6次

微信公众号原文

系统:Windows 7
软件:Excel 2010 / Access 2010

  • 这个系列开展一个新的篇章,重点关注Access数据库
  • 主体框架:以Excel作为操作界面,Access作为数据库
  • 今天讲讲如何将数据库中满足要求的数据拿出来
  • 涉及知识:ADOSQL:left join

Part 1:目标

成绩表

1.png

学生信息表

2.png

运行过程

1.gif
  1. 获取学号为1101学生在不同年级的语文成绩,输出信息包括:姓名,学号,性别,年级,语文成绩
  2. 最终想要获得的信息来自于两个工作表,所以需要连接查询
  3. 逻辑过程
  • 连接数据库
  • 根据需求确定SQL语句
  • 执行SQL语句,得到recordset
  • recordset写入工作表(字段名+所有记录 列名+每一行)
  • 断开与数据库的连接
  1. 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 '连接
    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

代码截图

3.png 4.png

执行结果

7.png

Part 3:部分代码解读

  1. SQL = "Select " & opFilds & " from " & "(" & tbls & ")" & " where (" & searchC & ")"
  • 本问题中,相关变量取值后SQL语句如下
  • Select 姓名,成绩表.学号,性别,年级,语文成绩 from (成绩表 left join 学生信息表 on 成绩表.学号=学生信息表.学号) where (成绩表.学号=1101)
  1. 中文解读:从成绩表和学生信息表连接表中获取学号为1101的学生信息
  2. 表1 left join 表2 on 表1.ID=表2.ID
  • 两个表进行连接,以左侧为基准,即这里的表1
  • 连接条件:表1与表2的ID号相同
  • 当表2中满足表1中ID条件的有多条记录,那么进行分别匹配
  • 当表2中没有满足表1中ID的条件时,匹配Null

例1:匹配多个,修改学生信息表,增加同样学号的

5.png 6.png

例2:若未匹配上,则对应信息为空

8.png

本文为原创作品,如需转载,可加小编微信号learningBin

以上为本次的学习内容,下回见

如发现有错误,欢迎留言指出


更多精彩,请关注微信公众号
扫描二维码,关注本公众号

公众号底部二维码.jpg

相关文章

  • Access/VBA/Excel-两个表联合查询左连接-11

    微信公众号原文 系统:Windows 7软件:Excel 2010 / Access 2010 这个系列开展一个新...

  • Access查询有哪些

    Access查询有哪些 Access查询分选择查询追加查询更新查询生成表查询交叉表查询联合查询等

  • mysql---多表查询

    判断数据表中的分数是否及格: 多表联合查询---左连接 统计个数 嵌套查询: 多表查询:

  • 多表查询

    两张表: 左连接: 左表全部查询,以左表为基准 右连接: 右表全部查询,以右表为基准 内连接: 找交集

  • mysql 面试问题

    左连接和右连接有什么区别?左连接 left join ...... on:左表中的数据全部查询,右表中只查询...

  • 连接查询;外键

    连接查询 连接查询(join)分类:内连接、外连接、自然连接、交叉连接 使用方式:左表 join 右表 交叉连接(...

  • 连接查询;外键

    连接查询 连接查询(join)分类:内连接、外连接、自然连接、交叉连接 使用方式:左表 join 右表 交叉连接(...

  • 多表关联查询定义,种类

    关联查询:连接查询、子查询、聚合查询 1.连接查询. 左外连结 左表的全部记录(部门表中的所有记录:demp方式1...

  • MYSQL优化

    一,联合查询 1.Innerjoin和左连接,右连接,子查询 A. inner join内连接也叫等值连接是,...

  • 数据库自关联,视图,事务

    自关联:自连接查询其实等同于连接查询,需要两张表,只不过它的左表(父表)和右表(子表)都是自己。做自连接查询的时候...

网友评论

    本文标题:Access/VBA/Excel-两个表联合查询左连接-11

    本文链接:https://www.haomeiwen.com/subject/sappixtx.html