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

全面掌握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操作包含以下部分:

部分

说明

table1table2

要组合其中记录的表的名称。

field1field2

被联接的字段的名称。如果它们不是数字,则这些字段的数据类型必须相同,并且包含同类数据,但是,它们不必具有相同的名称。

compopr

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

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

可以在任何FROM子句中使用INNER JOIN操作。这是最常用的联接类型。只要两个表的公共字段上存在相匹配的值,INNER JOIN(内部联接)就会组合这些表中的记录。

可以将INNER JOIN用于DepartmentsEmployees表,以选择每个部门的所有雇员。相反,选择所有部门(即使某些部门中并没有分配雇员)或者所有雇员(即使某些雇员没有分配到任何部门),则可以使用LEFT JOINRIGHT JOIN操作来创建外部联接。

如果试图联接包含MemoOLE对象数据的字段,将产生错误。

可以联接任何两个相似类型的数字字段。例如,可以联接自动编号和长整型字段,因为它们均是相似类型。然而,不能联接单精度型和双精度型类型字段。

以下示例演示如何通过CategoryID字段联接CategoriesProducts表:

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 JOINRIGHT JOIN可以嵌套在INNER JOIN之中,但是INNER JOIN不能嵌套于 LEFT JOINRIGHT 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源码网店

常见问答:

技术分类:

相关资源:

专栏作家

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