右连接和右外连接(右外连接查询说法不正确)
导语:什么是右外连接?在工作表查询中如何应用右外连接
大家好,今日继续讲解VBA数据库解决方案,今日讲解第66讲:什么是右外连接?在工作表查询中如何应用右外连接。
什么是右外连接呢?就是是以右表为基准,将条件数据进行连接,然以将右表为基础,没有对应项显示的左表列为NULL,换种说法,就是根据右表的记录,在被连接的左表中找出符合条件的记录与之匹配,如果找不到匹配的,用null填充。
特点:将返回右表的所有行,如果右表的某行在左表中没有匹配行,则将为左表返回空值;
下面我们仍是以工作表为例把右外连接的应用和写法讲给大家。
实例,我们是以下面的数据作为今日的讲解基础数据,然后我要建立一个右外连接提取数据:
提取字段是a.型号,a.生产厂,a.数量,b.供应商。由于我们有了之前内连接和左外连接的基础,我们想想返回的将是什么样的结果呢?下面我们看我给出的代码:
Sub mynzRecords_60() '第60讲 右外联接(工作表)
Dim cnADO, rsADO As Object
Dim strPath, strSQL As String
Worksheets("60").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
'右外连接的SQL语句
strSQL = "Select a.型号,a.生产厂,a.数量,b.供应商 From [数据$] as a RIGHT 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 '右外连接的SQL语句
strSQL = "Select a.型号,a.生产厂,a.数量,b.供应商 From [数据$] as a RIGHT JOIN [数据2$] as b ON a.型号=b.型号"
大家或许注意到了,上面的语句中我只是把左外连接中的LEFT 改为了RIGHT, 修正是非常的简单,但是返回的结果两者大不相同。
2 '提取表头数据
For i = 1 To rsADO.Fields.Count
Cells(1, i) = rsADO.Fields(i - 1).Name
Next
上述代码我给出的注释是提出表头数据,其实就是建立起来的rsADO连接的Fields的名称,也就是字段名。
下面看代码的运行结果;
今日内容回向:
1 什么是右外连接?它的特点是什么?
2 右外连接的SQL语句如何写?
本文内容由小涵整理编辑!