2017-12-16亲爱的潘玮柏 - 零零七 系统:Windows 7 软件:Excel 2010 / Access 2010 这个系列开展一个新的篇章,重点关注Access数据库 主体框架:以Excel作为操作界面,Access作为数据库 今天讲讲嵌套查询:需要先从表1获取信息1,再以信息1去表2获取最终信息2 涉及知识:ADO ,SQL:Select
Part 1:题目获取张三,李四的数学成绩 已知条件:数据库中有两个表(学生信息表,成绩表),如下图 逻辑过程:从学生信息表中获取张三/李四的学号,从成绩表中以学号查询满足条件的数学成绩
学生信息表
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:部分代码解读核心SQL:Select 学号,年级,数学成绩 from 成绩表 where (学号 in (Select 学号 from 学生信息表 where (姓名 in ('张三','李四')))) order by 学号 asc,年级 desc 中文释义:
核心SQL
思考:输出的信息中不含有姓名信息,看起来不清晰,那么如何将姓名信息加进来呢?和之前的left join结合吗?
|