搜索
写经验 领红包
 > 时尚

右连接和右外连接(右外连接查询说法不正确)

导语:什么是右外连接?在工作表查询中如何应用右外连接

大家好,今日继续讲解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语句如何写?

本文内容由小涵整理编辑!