Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > Access数据库-查询/SQL语句

全面掌握MS ACCESS SQL(40)

时 间:2018-01-23 10:19:42
作 者:Big Young   ID:252  城市:襄阳
摘 要:    LEFT JOIN、RIGHT JOIN操作的完整语法。
正 文:

第十二章 用LEFT JOINRIGHT JOIN操作建立外连查询

外连接分为左外连接(LEFT OUTER JOINLEFT JOIN)、右外连接(RIGHT OUTER JOINRIGHT JOIN)和全外连接(FULL OUTER JOINFULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。

左外连接是以左边表中的数据为基准,若左表有数据右表没有相关联的数据,则显示左表中的数据右表中的数据显示为空。就是说左外连接的结果集包括LEFT子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

右外连接是左向外连接的反向连接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。ACCESS SQL中没有直接提供全外连接的操作符,要想实现全外连接,就必须通过其它手段实现了。下面我们来学习一上ACCESS SQL的外部连接的语法。

 

第一节 LEFT JOINRIGHT JOIN操作的完整语法

ACCESS SQL中,LEFT JOIN用于创建左外部连接查询,而RIGHT JOIN用于创建右外部连接查询,它们的功能是将在FROM子句中提供的多个源表中的记录合并在一起。其完整的SQL语法结构是:

一、LEFT JOINRIGHT JOIN操作的完整语法

FROM table1 [ LEFT | RIGHT ] JOIN table2

ON table1.field1  compopr table2.field2

LEFT JOINRIGHT JOIN操作包含以下部分:

部分

说明

table1, table2

对其中的记录进行组合的表的名称。

field1, field2

要联接的字段的名称。这些字段必须属于相同的数据类型,并且包含相同种类的数据,但它们不需要有相同的名称。

compopr

任何关系比较运算符:“=”“<”“>”“<=”“>=”“<>”

二、关于LEFT JOINRIGHT JOIN操作的几点说明

使用LEFT JOIN操作来创建左外部联接。左外部联接包含两表中第一个表(左)中的所有记录,即使没有与第二个(右)表中的记录相匹配的值也是如此。

使用RIGHT JOIN操作来创建右外部联接。右外部联接包含两表中第二个表(右)中的所有记录,即使没有与第一个(左)表中的记录相匹配的值也是如此。

例如,可以将LEFT JOIN用于部门表(左)和员工表(右),以选择所有部门,包括那些未分配有员工的部门。若要选择所有员工,包括那些未分配到任一部门的员工,就要使用RIGHT JOIN

以下示例演示如何通过CategoryID字段将类别表和产品表联接起来。该查询会生成一个含所有类别的列表,包括那些不含任何产品的类别:

Select CategoryName, ProductName FROM Categories LEFT JOIN Products ON Categories.CategoryID = Products.CategoryID;

在此示例中,CategoryID是联接的字段,但由于Select语句中不包含该字段,所以查询结果中也不包含该字段。若要包含联接的字段,可在Select语句中输入字段名称在本例中为Categories.CategoryID

以下几点须特别注意:

如果希望创建的查询只包含那些联接字段数据相同的记录,可使用INNER JOIN操作。

LEFT JOINRIGHT JOIN可以嵌套在INNER JOIN中,但INNER JOIN无法嵌套在LEFT JOINRIGHT JOIN中。请参阅INNER JOIN主题中有关嵌套的内容,了解如何将联接嵌套在其他联接中。

可以链接多个ON子句。请参阅INNER JOIN主题中有关链接字句的内容,了解如何链接字句。

如果尝试联接包含备注MemoOLE对象数据的字段,就会出错。

三、LEFT JOINRIGHT JOIN操作编程示例

此示例假设在“Employees”(员工)表中存在“Department Name”(部门名)和“Department ID”(部门编号)字段,需要说明的是ACCESS自带的名为罗斯文的示例数据库的员工表中不一定真有这些字段。

该示例将选取所有的部门,包括那些没有分配员工的部门。

本示例程序调用一个名为“EnumFields”的过程,在此示例过程中我们可以看到 “Select”语句的例子。

Sub LeftRightJoinX()

 

    Dim dbs As Database, rst As Recordset

 

    ' Modify this line to include the path to Northwind

    ' on your computer.

    Set dbs = OpenDatabase("Northwind.mdb")

    

    ' Select all departments, including those 

    ' without employees.

    Set rst = dbs.OpenRecordset _

        ("Select [Department Name], " _

        & "FirstName & Chr(32) & LastName AS Name " _

        & "FROM Departments LEFT JOIN Employees " _

        & "ON Departments.[Department ID] = " _

        & "Employees.[Department ID] " _

        & "ORDER BY [Department Name];")

    

    ' Populate the Recordset.

    rst.MoveLast

    

    ' Call EnumFields to print the contents of the 

    ' Recordset. Pass the Recordset object and desired

    ' field width.

    EnumFields rst, 20

 

    dbs.Close

 

End Sub

 



Access软件网QQ交流群 (群号:483923997)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助