Access/VBA/Excel-13-巢狀查詢

weixin_34413065發表於2017-12-16

微信公眾號原文

系統:Windows 7
軟體:Excel 2010 / Access 2010

  • 這個系列開展一個新的篇章,重點關注Access資料庫
  • 主體框架:以Excel作為操作介面,Access作為資料庫
  • 今天講講巢狀查詢:需要先從表1獲取資訊1,再以資訊1去表2獲取最終資訊2
  • 涉及知識:ADOSQL:Select

Part 1:題目

  1. 獲取張三李四的數學成績
  2. 已知條件:資料庫中有兩個表(學生資訊表成績表),如下圖
  3. 邏輯過程:從學生資訊表中獲取張三/李四的學號,從成績表中以學號查詢滿足條件的數學成績

學生資訊表

7490971-cd0cbd3239c81ecb.png
1.png

成績表

7490971-2963efff6d6e0e9b.png
2.png

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


程式碼截圖

7490971-fb669391b6f0d4f6.png
3.png

執行結果

7490971-bef8a75777dacad6.png
4.png

Part 3:部分程式碼解讀

  1. 核心SQLSelect 學號,年級,數學成績 from 成績表 where (學號 in (Select 學號 from 學生資訊表 where (姓名 in ('張三','李四')))) order by 學號 asc,年級 desc
  2. 中文釋義:
  • 兩層Select,內層獲取張三/李四的學號,外層以學號檢索需要的資訊
  • 輸出排序:第一級排序以學號升序(asc),第二級排序以年級降序(desc

核心SQL

7490971-5b0bee3d9583e4ca.png
5.png

思考:輸出的資訊中不含有姓名資訊,看起來不清晰,那麼如何將姓名資訊加進來呢?和之前的left join結合嗎?


本文為原創作品,如需轉載,可加小編微訊號learningBin

以上為本次的學習內容,下回見

如發現有錯誤,歡迎留言指出


更多精彩,請關注微信公眾號
掃描二維碼,關注本公眾號

7490971-426ce9fb969584ac.jpg
公眾號底部二維碼.jpg

相關文章