内连接查询和外连接查询的区别(什么是左外连接)

大家好,我们今天接着讲连接的方式的第二种,左外连接。在上两讲中,我们讲了内连接,并用内连接分别连接数据库和EXCEL进行了实例的应用讲解,我们今日讲解第二种连接:左外联接。

所谓左外联接,是以左表为基准,将两表的数据进行连接,然后将左表没有对应项显示为NULL;换种说法:就是根据左表的记录,在被连接的右表中找出符合条件的记录与之匹配,如果找不到与左表匹配的,用null表示。

左连接特点:左外连接是外连接的一种,将显示全部左边表中的所有项目,即使其中有些项中的数据未填写完全(在右表中没有查找到对应的值)。

为了理解上述的意义,我们还是以实例来讲解,我们今日讲解的是工作表的连接,下一讲是对数据表的讲解:

实例,同样我们仍有两页的工作表如下:

内连接查询和外连接查询的区别(什么是左外连接)(1)

上述数据中,我们注意到在"数据"页中的型号在"数据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

代码截图:

内连接查询和外连接查询的区别(什么是左外连接)(2)

代码讲解:

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 这句是把数据反馈到工作表中 的固定位置。

下面我们看看代码的运行:

内连接查询和外连接查询的区别(什么是左外连接)(3)

对于没有查找到的数值就是空值的状态了。

今日内容回向:

1 什么是左外连接?

2 左外连接的语法是什么样子的?

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页