----------------------------------------
LEFT JOIN 和 RIGHT JOIN 运算
----------------------------------------当使用在任何的 FROM 子句中,将组合来源表的记录。语法FROM table1 [ LEFT | RIGHT ] JOIN table2 
ON table1.field1 compopr table2.field2LEFT JOIN 及 RIGHT JOIN 运算可分为以下几个部分:部分 描述
table1, table2 记录被组合的表的名称。
field1, field2 被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。
compopr 任何的关系比较运算子:"=," "<," ">," "<=," ">=," 或 "<>."
说明使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。
使用一个 RIGHT JOIN 运算创建一个右边外部联接。右边外部联接将包含了从第二个(右边)开始的两个表中的全部记录,即使在第一个(左边)表中并没有匹配值的记录。
例如,可以使用 LEFT JOIN 与部门(左边)及员工(右边)表来选择所有的部门,包含了没有分配到员工的部门。可以使用 RIGHT JOIN 选择所有的员工,包含了没有分配到部门的员工。下列示例显示如何在类标识符字段中联接类表及产品表。查询将会列出所有种类的列表,包含那些没有产品在其中的种类:SELECT CategoryName,
ProductName
FROM Categories LEFT JOIN Products
ON Categories.CategoryID = Products.CategoryID;在此示例中,类标识符是联接字段,但它并不会包含在查询结果之中,因为它没有被包含在 SELECT 语句中。要包含联接的字段,请在 SELECT 语句中输入字段名 - 在这个示例中为 Categories.CategoryID。注意?使用 INNER JOIN 运算创建一个查询,且该查询只包含在联接字段中有相同数据的记录。
?在 INNER JOIN 之中可以写一个嵌套的 LEFT JOIN 或一个 RIGHT JOIN,但是在一个 LEFT JOIN 或一个 RIGHT JOIN 之中不能写嵌套的 INNER JOIN。请参阅 INNER JOIN 主题中有关使用嵌套的讨论,从其中可获知如何在其它联接中编写嵌套联接的信息。
?可以链接多个 ON 子句。若需更多信息,请参阅在 INNER JOIN 主题中的子句链接的讨论。?如果您想试图联接包含Memo 数据类型或 OLE Object 数据类型的字段,将会发生错误。
----------------------------------------
LEFT JOIN、RIGHT JOIN 运算示例
----------------------------------------
此示例假设在员工表中存在假设的单位名称和单位标识符的字段。注意这些字段实际上在 Northwind 数据库员工表中并不存在。
此示例选择所有单位,包含那些不含员工的单位。
此示例调用 EnumFields 过程,且可以在 SELECT 语句示例中找到该过程。Sub LeftRightJoinX() Dim dbs  As Database, rst  As Recordset ' 在您的计算机中修改此行使其正确指到 Northwind 的路径。
Set dbs = OpenDatabase("Northwind.mdb")

' 选择所有单位,包含那些不含员工的单位。
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];")

'移居记录集。
rst.MoveLast

' 调用 EnumFields 来打印 Recordset 的内容。
' 通过 Recordset 对象和需要的字段宽度。
EnumFields rst, 20 dbs.CloseEnd Sub