大家好,我们今天接着讲左外连接,今日讲左外连接在数据表中的应用。对于数据而言,有的放在EXCEL文件中,我们称之为工作表;有的放在数据库中,我们称之为数据表。两者都是数据的存储方式,这也是我在本书中着重讲解的两种数据连接的原因。并不是说数据库就一定是什么数据存储的高级设备,我们工作中最常接触的EXCEL也可以作为数据库来对应的,对于左外连接而言,我在上讲详细的介绍了和EXCEL工作表连接的应用,今日我将讲解这种连接和数据表连接的应用。

实例,我们还是用第57讲内容的数据表数据,在mydata2中的数据如下:




连接查询创建索引的命令 连接查询的两种写法_连接查询创建索引的命令


在mydata中的数据如下:


连接查询创建索引的命令 连接查询的两种写法_左外连接_02


我们要知道在数据库mydata2中的所有员工分红情况,这个时候就可以用左外连接了。下面看我给出的代码:

Sub mynzRecords_59() '第59讲 左外连接应用于两个数据表的讲解
Dim cnADO, rsADO As Object
Dim strPath, strSQL As String
Worksheets("59").Select
Cells.ClearContents
Set cnADO = CreateObject("ADODB.Connection")
Set rsADO = CreateObject("ADODB.Recordset")
strPath = ThisWorkbook.Path & "mydata2.accdb"
strTable = "员工信息"
cnADO.Open "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & strPath
strSQL = "SELECT a.员工编号,a.姓名,a.性别,b.金额 FROM " _
& "员工信息 AS a LEFT JOIN [MS Access;Pwd=;Database=" & ThisWorkbook.Path _
& "mydata.accdb;].员工分红 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
ActiveSheet.Columns(rsADO.Fields.Count).NumberFormatLocal = "¥#,##0.00;¥-#,##0.00"
rsADO.Close
cnADO.Close
Set rsADO = Nothing
Set cnADO = Nothing
End Sub

代码截图:


连接查询创建索引的命令 连接查询的两种写法_数据_03


代码解读:

1 不知大家注意到否,上述代码和内连接第57讲内容比较,我只是把上面的INNER换成了LEFT.
2 我们需要注意的是这种连接方式的SQL语句的写法:strSQL = "SELECT a.员工编号,a.姓名,a.性别,b.金额 FROM " _
& "员工信息 AS a LEFT JOIN [MS Access;Pwd=;Database=" & ThisWorkbook.Path _
& "mydata.accdb;].员工分红 AS b ON a.员工编号 = b.员工编号"

其中的连接第二个数据库的结构大家要千万注意,由于在之前的57讲中我详细的讲过了不再多说,这里只是提醒大注意:在写代码的时候尽可能不要去书写,而是复制和修正,这样会让你的代码会更容易些。

好了,下面看代码的运行:


连接查询创建索引的命令 连接查询的两种写法_连接查询创建索引的命令_04


今日内容回向:

1 左外连接和内连接返回的结果有什么不同?

2 左外连接连接数据表和工作表的方式有什么不同?