全面掌握MS ACCESS SQL(40)
时 间:2018-01-23 10:19:42
作 者:Big Young ID:252 城市:襄阳
摘 要: LEFT JOIN、RIGHT JOIN操作的完整语法。
正 文:
第十二章 用LEFT JOIN、RIGHT JOIN操作建立外连查询
外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。
左外连接是以左边表中的数据为基准,若左表有数据右表没有相关联的数据,则显示左表中的数据右表中的数据显示为空。就是说左外连接的结果集包括LEFT子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
右外连接是左向外连接的反向连接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。ACCESS SQL中没有直接提供全外连接的操作符,要想实现全外连接,就必须通过其它手段实现了。下面我们来学习一上ACCESS SQL的外部连接的语法。
第一节 LEFT JOIN、RIGHT JOIN操作的完整语法
在ACCESS SQL中,LEFT JOIN用于创建左外部连接查询,而RIGHT JOIN用于创建右外部连接查询,它们的功能是将在FROM子句中提供的多个源表中的记录合并在一起。其完整的SQL语法结构是:
一、LEFT JOIN、RIGHT JOIN操作的完整语法
FROM table1 [ LEFT | RIGHT ] JOIN table2
ON table1.field1 compopr table2.field2
LEFT JOIN和RIGHT JOIN操作包含以下部分:
部分 |
说明 |
table1, table2 |
对其中的记录进行组合的表的名称。 |
field1, field2 |
要联接的字段的名称。这些字段必须属于相同的数据类型,并且包含相同种类的数据,但它们不需要有相同的名称。 |
compopr |
任何关系比较运算符:“=”、“<”、“>”、“<=”、“>=”或“<>”。 |
二、关于LEFT JOIN、RIGHT 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 JOIN或RIGHT JOIN可以嵌套在INNER JOIN中,但INNER JOIN无法嵌套在LEFT JOIN或RIGHT JOIN中。请参阅INNER JOIN主题中有关嵌套的内容,了解如何将联接嵌套在其他联接中。
可以链接多个ON子句。请参阅INNER JOIN主题中有关链接字句的内容,了解如何链接字句。
如果尝试联接包含备注Memo或OLE对象数据的字段,就会出错。
三、LEFT JOIN、RIGHT 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交流群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
- Access仿平台的多值选择器...(10.24)
- 【Access日期区间段查询】...(10.22)
- 【Access源码示例】VBA...(10.12)
- Access累乘示例,Acce...(10.09)
- 数值8.88,把整数8去掉,转...(10.08)
- 【Access自定义函数】一个...(09.30)
- 【Access选项卡示例】Ac...(09.09)
学习心得
最新文章
- Access判断多条明细的配方或订...(11.30)
- 如何让后台数据库在局域网共享时,且...(11.29)
- 【Access月初月末日期设置方法...(11.29)
- 【Access IIF函数嵌套示例...(11.26)
- Access快速开发平台--使用组...(11.25)
- Access快速开发平台--对上传...(11.22)
- Access快速开发平台企业版--...(11.18)
- 不会用多表联合查询,多表查询没结果...(11.16)
- 【案例分享】主键字段值含有不间断空...(11.16)
- Access快速开发平台--后台D...(11.14)