使用 Access SQL INNER JOIN查询-杨雪
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> Access数据库-查询/SQL语句


使用 Access SQL INNER JOIN查询

发表时间:2021/6/17 12:51:59 评论(0) 浏览(5003)  评论 | 加入收藏 | 复制
   
摘 要:使用 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群(群号:198465573)
 
 相关文章
sql语句(二)inner join  【欢乐小爪  2012/4/13】
SQL语句(三)INNER JOIN ... ON用法  【欢乐小爪  2012/4/14】
【转】画图解释 SQL join 语句  【缪炜  2015/10/30】
【Access示例】access join形式删除数据  【缪炜  2018/4/30】
Join函数用法  【杨雪  2019/5/17】
【Access查询小知识分享】查询中要做大量的left join ...  【麥田  2020/11/12】
Join 函数  【杨雪  2021/4/9】
常见问答
技术分类
相关资源
文章搜索
关于作者

杨雪

文章分类

文章存档

友情链接