全面掌握MS ACCESS SQL(38)
时 间:2018-01-22 15:03:56
作 者:Big Young ID:252 城市:襄阳
摘 要: INNER JOIN 操作的完整语法。
正 文:
第十二章 用INNER JOIN操作建立内连查询
内连接也叫连接,是最早的一种连接。还可以被称为普通连接或者自然连接,内连接是从结果表中删除与其他被连接表中没有匹配行的所有行,所以内连接可能会丢失信息。
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
2、不等连接:在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。
3、自然连接是一种特殊的等值连接,他要求多个表有相同的属性字段,然后条件为相同的属性字段值相等,最后再将表中重复的属性字段去掉,即为自然连接。
第一节 INNER JOIN 操作的完整语法
INNER JOIN 操作的功能,就将这两个表中的记录组合起来,只要两个表的公共字段有匹配值。也就是操作的结果是将公共字段有匹配值的记录的所有字段连接起来,构成更长的记录,形成一张大表。其完整语法如下:
一、INNER JOIN 操作的完整语法
FROM table1 INNER JOIN table2 ON table1.field1 compopr table2.field2
INNER JOIN操作包含以下部分:
部分 |
说明 |
table1、table2 |
要组合其中记录的表的名称。 |
field1、field2 |
被联接的字段的名称。如果它们不是数字,则这些字段的数据类型必须相同,并且包含同类数据,但是,它们不必具有相同的名称。 |
compopr |
任何关系比较运算符:"="、"<"、">"、"<="、">="或 "<>"。 |
二、关于INNER JOIN 操作的几点说明
可以在任何FROM子句中使用INNER JOIN操作。这是最常用的联接类型。只要两个表的公共字段上存在相匹配的值,INNER JOIN(内部联接)就会组合这些表中的记录。
可以将INNER JOIN用于Departments及Employees表,以选择每个部门的所有雇员。相反,选择所有部门(即使某些部门中并没有分配雇员)或者所有雇员(即使某些雇员没有分配到任何部门),则可以使用LEFT JOIN或RIGHT JOIN操作来创建外部联接。
如果试图联接包含Memo或OLE对象数据的字段,将产生错误。
可以联接任何两个相似类型的数字字段。例如,可以联接自动编号和长整型字段,因为它们均是相似类型。然而,不能联接单精度型和双精度型类型字段。
以下示例演示如何通过CategoryID字段联接Categories和Products表:
Select CategoryName, ProductName
FROM Categories INNER JOIN Products
ON Categories.CategoryID = Products.CategoryID;
在前面的示例中,CategoryID是联接字段,但是它不包含在查询输出中,因为它不包含在Select语句中。若要包含联接字段,请在Select语句中包含该字段名,在本例中为Categories.CategoryID。
也可以在JOIN语句中链接多个ON子句,请使用如下语法:
Select fields FROM table1 INNER JOIN table2 ON table1.field1 compopr table2.field1 AND ON table1.field2 compopr table2.field2) or ON table1.field3 compopr table2.field3)];
也可以通过如下语法嵌套JOIN语句:
Select fields FROM table1 INNER JOIN (table2 INNER JOIN [( ]table3 [INNER JOIN [( ]tablex [INNER JOIN ...)] ON table3.field3 compopr tablex.fieldx)] ON table2.field2 compopr table3.field3) ON table1.field1 compopr table2.field2;
LEFT JOIN或RIGHT JOIN可以嵌套在INNER JOIN之中,但是INNER JOIN不能嵌套于 LEFT JOIN或RIGHT JOIN之中。
三、INNER JOIN 操作的编程示例
本例创建两个等同联接:一个是Order Details表与Orders表之间的联接,另一个是Orders表与Employees表之间的联接。这是很有必要的,因为Employees表不包含销售数据,而Order Details表不包含雇员数据。查询将产生雇员及其总销售额的列表。
以下示例调用EnumFields过程,您可以在Select语句示例中找到该过程。
Sub InnerJoinX()
Dim dbs As Database, rst As Recordset
' Modify this line to include the path to Northwind
' on your computer.
Set dbs = OpenDatabase("Northwind.mdb")
' Create a join between the order Details and
' orders tables and another between the orders and
' Employees tables. Get a list of employees and
' their total sales.
Set rst = dbs.OpenRecordset("Select DISTINCTROW " _
& "Sum(UnitPrice * Quantity) AS Sales, " _
& "(FirstName & Chr(32) & LastName) AS Name " _
& "FROM Employees INNER JOIN(Orders " _
& "INNER JOIN [Order Details] " _
& "ON [Order Details].OrderID = " _
& "Orders.OrderID ) " _
& "ON orders.EmployeeID = " _
& "Employees.EmployeeID " _
& "GROUP BY (FirstName & Chr(32) & LastName);")
' 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)
- 统计当月之前(不含当月)的记录...(03.11)
- 【Access Inputbo...(03.03)
- 按回车键后光标移动到下一条记录...(02.12)
- 【Access Dsum示例】...(02.07)
- Access对子窗体的数据进行...(02.05)
- 【Access高效办公】上月累...(01.09)
- 【Access高效办公】上月累...(01.06)
- 【Access Inputbo...(12.23)
- 【Access Dsum示例】...(12.16)

学习心得
最新文章
- 32位的Access软件转化为64...(04.12)
- 【Access高效办公】如何让vb...(04.11)
- 仓库管理实战课程(10)-入库功能...(04.08)
- Access快速开发平台--Fun...(04.07)
- 仓库管理实战课程(9)-开发往来单...(04.02)
- 仓库管理实战课程(8)-商品信息功...(04.01)
- 仓库管理实战课程(7)-链接表(03.31)
- 仓库管理实战课程(6)-创建查询(03.29)
- 仓库管理实战课程(5)-字段属性(03.27)
- 设备装配出入库管理系统;基于Acc...(03.24)