大家好,我們今天接着講連接的方式的第二種,左外連接。在上兩講中,我們講了内連接,并用内連接分别連接數據庫和EXCEL進行了實例的應用講解,我們今日講解第二種連接:左外聯接。
所謂左外聯接,是以左表為基準,将兩表的數據進行連接,然後将左表沒有對應項顯示為NULL;換種說法:就是根據左表的記錄,在被連接的右表中找出符合條件的記錄與之匹配,如果找不到與左表匹配的,用null表示。
左連接特點:左外連接是外連接的一種,将顯示全部左邊表中的所有項目,即使其中有些項中的數據未填寫完全(在右表中沒有查找到對應的值)。
為了理解上述的意義,我們還是以實例來講解,我們今日講解的是工作表的連接,下一講是對數據表的講解:
實例,同樣我們仍有兩頁的工作表如下:
上述數據中,我們注意到在"數據"頁中的型号在"數據2"中有些是沒有的,有些是有的,我們要返回的是整個"數據"頁中的條目,并把每行按照型号進行匹配。有的返回供應商代碼,沒有的即表示為空值,代碼怎麼去寫呢?下面看我給出的代碼:
Sub mynzRecords_58() '第58講 左外聯接
Dim cnADO, rsADO As Object
Dim strPath, strSQL As String
Worksheets("58").Select
Cells.ClearContents
Set cnADO = CreateObject("ADODB.Connection")
Set rsADO = CreateObject("ADODB.Recordset")
strPath = ThisWorkbook.FullName
cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 12.0;hdr=yes;imex=1';data source=" & strPath
strSQL = "Select a.型号,a.生産廠,a.數量,b.供應商 From [數據$] as a LEFT JOIN [數據2$] as b ON a.型号=b.型号"
rsADO.Open strSQL, cnADO, 1, 3
For i = 1 To rsADO.Fields.Count
Cells(1, i) = rsADO.Fields(i - 1).Name
Next
Range("a2").CopyFromRecordset rsADO
rsADO.Close
cnADO.Close
Set rsADO = Nothing
Set cnADO = Nothing
End Sub
代碼截圖:
代碼講解:
1 strSQL = "Select a.型号,a.生産廠,a.數量,b.供應商 From [數據$] as a LEFT JOIN [數據2$] as b ON a.型号=b.型号"
上述代碼中我們應用了Left join .. on .. 标準的左外連接的語句,(有時也寫作left outer join .. on .. )解釋如下:
Select a.型号,a.生産廠,a.數量,b.供應商: 表示返回的字段;
[數據$] as a LEFT JOIN [數據2$] as b: 此處定義了[數據$] 為A表, 定義[數據2$]為b表
ON a.型号=b.型号" : 是條件類型
2 Range("a2").CopyFromRecordset rsADO 這句是把數據反饋到工作表中 的固定位置。
下面我們看看代碼的運行:
對于沒有查找到的數值就是空值的狀态了。
今日内容回向:
1 什麼是左外連接?
2 左外連接的語法是什麼樣子的?
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!