大家好,我们今天接着讲连接的方式的第二种,左外连接。在上两讲中,我们讲了内连接,并用内连接分别连接数据库和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 左外连接的语法是什么样子的?
,