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

使用 Access SQL INNER JOIN查询

时 间:2021-06-17 12:51:59
作 者:杨雪   ID:42182  城市:南京
摘 要:使用 Access SQL INNER JOIN查询。
正 文:

      在关系数据库系统(如 Access)中,经常需要同时从多个表中提取信息。 这可以通过使用 SQL JOIN 语句来完成,该语句使您能够从已定义关系的表中检索记录,无论这种关系是一对一、一对多还是多对多。

INNER JOIN (也称为等效联接)是最常用类型的联接。 此联接通过匹配表之间共有的字段值来从两个或多个表中检索行。 联接的字段必须具有相似的数据类型,不能联接"备注"或"OLE 对象"数据类型。

若要构建 INNER JOIN 语句,请在 SELECT 语句的 FROM 子句中使用 INNER JOIN 关键字。

本示例使用 INNER JOIN 构建一个包含所有具有发票的客户以及这些发票的日期和金额的结果集。

SELECT [Last Name], InvoiceDate, Amount 
   FROM tblCustomers INNER JOIN tblInvoices 
   ON tblCustomers.CustomerID=tblInvoices.CustomerID 
   ORDER BY InvoiceDate 

请注意,表名称由 INNER JOIN 关键字进行划分,关系比较位于 ON 关键字之后。 对于关系比较,也可以使用 <、>、<=、>= 或 <> 运算符,还可以使用 BETWEEN 关键字。 还要注意,两个表中的 ID 字段只能在关系比较中使用;它们不是最终结果集的一部分。

若要进一 步限定 SELECT 语句,可以在 ON 子句中的联接比较之后使用 WHERE 子句。

以下示例将结果集缩小为仅包括日期为 2020 年 1 月 1 日之后的发票。

SELECT [Last Name], InvoiceDate, Amount 
   FROM tblCustomers INNER JOIN tblInvoices 
   ON tblCustomers.CustomerID=tblInvoices.CustomerID 
   WHERE tblInvoices.InvoiceDate > #01/01/2020# 
   ORDER BY InvoiceDate 

当必须联接多个表时,可以嵌套 INNER JOIN 子句。 以下示例以上一个 SELECT 语句为基础建立结果集,而且还通过为 tblShipping 表添加 INNER JOIN 来包括每个客户所在的城市和省/市/自治区。

SELECT [Last Name], InvoiceDate, Amount, City, State 
   FROM (tblCustomers INNER JOIN tblInvoices 
   ON tblCustomers.CustomerID=tblInvoices.CustomerID) 
      INNER JOIN tblShipping 
      ON tblCustomers.CustomerID=tblShipping.CustomerID 
   ORDER BY InvoiceDate 

请注意,第一 个 JOIN 子句括在括号中,以保持它在逻辑上与第二 个 JOIN 子句分隔开。 也可以通过在 FROM 子句中使用第二个表名称的别名将表与其自身联接。 假设要查找所有具有重复姓氏的客户记录。 可以通过为第二个表创建别名“A”并且检查不同的名字完成此操作。

SELECT tblCustomers.[Last Name], 
   tblCustomers.[First Name] 
   FROM tblCustomers INNER JOIN tblCustomers AS A 
   ON tblCustomers.[Last Name]=A.[Last Name] 
   WHERE tblCustomers.[First Name]<>A.[First Name] 
   ORDER BY tblCustomers.[Last Name] 

OUTER JOIN
想象两个表彼此挨着:一个表在左边,一个表在右边。 LEFT OUTER JOIN 选择右表中符合关系比较条件的所有行,同时从左表中选择所有行,即使右表中不存在匹配项。 RIGHT OUTER JOIN 恰好与 LEFT OUTER JOIN 相反;右表中的所有行都被保留。
例如,假设要确定已开给每个客户的发票总额,但如果某个客户没有发票,希望通过显示单词"NONE"来说明这种情况。

SELECT [Last Name] & ', ' &  [First Name] AS Name, 
   IIF(Sum(Amount) IS NULL,'NONE',Sum(Amount)) AS Total 
   FROM tblCustomers LEFT OUTER JOIN tblInvoices 
   ON tblCustomers.CustomerID=tblInvoices.CustomerID 
   GROUP BY [Last Name] & ', ' &  [First Name] 

上一个 SQL 语句中实现了三项操作。 第一是使用字符串连接运算符“&”。 此运算符允许您将两个或多个字段作为一个字符串联接在一起。 第二是使用直接 if (IIf) 语句,该语句用于检查合计是否为空。 如果为空,则该语句返回“NONE”。 如果合计不为空,则返回值。 最后是使用 OUTER JOIN 子句。 使用 LEFT OUTER JOIN 保留左表中的行,以便能够看到所有客户(即使这些客户没有发票)。

OUTER JOIN 在多表联接中可以嵌套在 INNER JOIN 内,但 INNER JOIN 不能嵌套在 OUTER JOIN 内。

Access软件网QQ交流群 (群号:54525238)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

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