美文网首页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

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