打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Access/VBA/Excel-13-嵌套查询

 2017-12-16

亲爱的潘玮柏 - 零零七

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

  • 这个系列开展一个新的篇章,重点关注Access数据库

  • 主体框架:以Excel作为操作界面,Access作为数据库

  • 今天讲讲嵌套查询:需要先从表1获取信息1,再以信息1去表2获取最终信息2

  • 涉及知识:ADOSQL:Select

Part 1:题目

  1. 获取张三李四的数学成绩

  2. 已知条件:数据库中有两个表(学生信息表成绩表),如下图

  3. 逻辑过程:从学生信息表中获取张三/李四的学号,从成绩表中以学号查询满足条件的数学成绩

学生信息表

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"    tbl1Name = "学生信息表"    tbl2Name = "成绩表"    '连接数据库    With cnn        .Provider = "Microsoft.ACE.OLEDB.12.0"        .Open "Data Source=" & dbAddr    
   End With    op1Filds = "学号"    search1C = "姓名 in ('张三','李四')"    SQL1 = "Select " & op1Filds & " from " & tbl1Name & " where (" & search1C & ")"    op2Filds = "学号,年级,数学成绩"    search2C = "学号 in (" & SQL1 & ")"    SQL2 = "Select " & op2Filds & " from " & tbl2Name & " where (" & search2C & ") order by 学号 asc,年级 desc"    Set rs = cnn.Execute(SQL2)    
   
   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:部分代码解读

  1. 核心SQLSelect 学号,年级,数学成绩 from 成绩表 where (学号 in (Select 学号 from 学生信息表 where (姓名 in ('张三','李四')))) order by 学号 asc,年级 desc

  2. 中文释义

    • 两层Select,内层获取张三/李四的学号,外层以学号检索需要的信息

    • 输出排序:第一级排序以学号升序(asc),第二级排序以年级降序(desc

核心SQL


思考:输出的信息中不含有姓名信息,看起来不清晰,那么如何将姓名信息加进来呢?和之前的left join结合吗?

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
SQL语句之Select
SQL查询语句大全(大佬总结,必看)
VBA SQLServer 基本操作
VBA SQL基础
分工作表汇总成一表问题
18,用Dir提取多工作簿数据 (ADO)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服