全面掌握MS ACCESS SQL(40)-Big Young
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> Access数据库-查询/SQL语句


全面掌握MS ACCESS SQL(40)

发表时间:2018/1/23 10:19:42 评论(0) 浏览(3049)  评论 | 加入收藏 | 复制
   
摘 要:    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群(群号:198465573)
 
 相关文章
全面掌握MS ACCESS SQL(37)  【Big Young  2018/1/22】
全面掌握MS ACCESS SQL(38)  【Big Young  2018/1/22】
全面掌握MS ACCESS SQL(39)  【Big Young  2018/1/22】
全面掌握MS ACCESS SQL(41)  【Big Young  2018/1/23】
全面掌握MS ACCESS SQL(42)  【Big Young  2018/1/25】
全面掌握MS ACCESS SQL(43)  【Big Young  2018/1/25】
常见问答
技术分类
相关资源
文章搜索
关于作者

Big Young

文章分类

文章存档

友情链接