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

精通MS-ACCESS SQL之基础篇(12)

时 间:2017-12-01 16:12:33
作 者:Big Young   ID:252  城市:襄阳
摘 要:    ACCESS SQL的JOIN(连接)查询。
正 文:

第十二节 ACCESS SQLJOIN(连接)查询

 

JOIN子句在SQL中用于连接两个或更多个表或查询中的记录,这种连接是依据表或查询中字段间已存在的相互关系进行的。

一、JOIN(连接)查询的类型

SQL JOIN(连接)查询有多种类型,具体如下:

  • INNER JOIN(内部连接):返回两个表中相关字段存在匹配值的记录。
  • LEFT OUTER JOIN(左外部连接):返回左表中全部记录,并同时返回右表中与之相匹配的记录。
  • RIGHT OUTER JOIN(右外部连接):返回右表中的全部记录并同时返回左表中与之相匹配的记录。
  • FULL OUTER JOIN(全外部连接):返回所有的与左表或者与右表关联匹配的记录。

为了大家能更好地理解JOIN查询所体现的两表之间的逻辑关系,我们用图示来反映它们的相互关系,如图12-1至图12-4所示:

12-1:内部连接(INNER JOIN)中表间关系

12-2:左外部连接(LEFT JOIN)中表间关系

12-3:右外部连接(RIGHT JOIN)中表间关系

12-4:全外部连接(FULL OUTER JOIN)中表间关系

 

二、INNER JOIN(内部连接)查询

从图12-1我们可以明确发现,INNER JOIN(内部连接)查询的目的是要找出两个相关联的表中有交叉的记录,就是两者的交集。

1INNER JOIN(内部连接)查询语法

INNER JOIN(内部连接)查询的SQL语句的语法为:

Select column_name(s)

FROM table1

INNER JOIN table2 ON table1.column_name = table2.column_name;

这里的column_name(s)是查询中将要显示或提取出的字段的列表或叫数据列的列表;table1table2是将要对其进行JOIN(连接)查询的第一个表与第二个表的名字;ON关键字后的table1.column_name = table2.column_name是关系表达式,用于测试两表相关字段的关系,用于筛选它们的交集。

2INNER JOIN(内部连接)查询实例

这里我们使用MS ACCESS自带的示例数据库中的表作为例子数据来说明问题,先看一看订单表,如图12-5所示:

点击图片查看大图

12-5:订单表中的数据行

再来浏览一下客户表的内容,如图12-6所示:

点击图片查看大图

12-6:客户表中的数据行

下面我们使用JOIN(连接)查询的SQL语句来查询所有订单的客户信息,如图12-7所示:

12-7JOIN(连接)查询语句示例

此查询执行后的结果如图12-8所示:

12-8JOIN(连接)查询的结果

JOIN(连接)查询也可以实现三个表及以上的多表查询,查询语句如图12-9所示:

12-9:三个表的JOIN(连接)查询

需要注意的是,在ACCESS SQLJOIN(连接)三个表及更多表的查询中,后续的JOIN语句均需加上圆括号,不然系统会报错。查询后的结果如图12-10所示:

12-10:三表JOIN(连接)查询结果

三、LEFT JOIN(左外部连接)查询

MS ACCESS SQLLEFT JOIN(左外部连接)查询返回左表(即第一个表:表1)的全部记录,同时连接返回右表(即第二个:表2)中与表1相匹配的记录,如果表2中没有相应的与表1相匹配的记录,则返回的右表位置部分为NULL值。

1LEFT JOIN(左外部连接)查询的基本语法

Select column_name(s)

FROM table1

LEFT JOIN table2 ON table1.column_name = table2.column_name;

语法结构中的项目与前面INNER JOIN查询语法中的是一样的,大家可以参考前面的内容,这里不再是赘述,需要说明的是:在MS ACCESS SQLLEFT JOIN查询中,OUTER这个关键字是可以省略掉的,这一点应注意。

2LEFT JOIN查询实例

我们不是以前面用过的罗斯文商贸示例数据库中的订单表及客户表为例来说明LEFT JOIN(左外部连接)查询的基本用法。

我们把“客户”表作为左表即表1订单表作为右表即表2,用下面的语句进行查询:

Select 客户.公司, 订单.[订单 ID]

FROM 客户

LEFT OUTER JOIN 订单 ON 客户.ID = 订单.[客户 ID]

ORDER BY 客户.公司;

执行查询后得到如图12-11所示的效果:

12-11LEFT JOIN(左外部连接)查询结果

四、RIGHT JOIN(右外部连接)查询

RIGHT OUTER JOIN(右外部连接)查询与左外部连接查询极其相似,所不同的是RIGHT OUTER JOIN(右外部连接)返回右表(表2)的全部记录,同时连接返回左表(表1)中与右表相匹配的记录,左表中没有相应匹配记录的位置的值为NULL

其基本语法为:

Select column_name(s)

FROM table1

RIGHT JOIN table2 ON table1.column_name = table2.column_name;

说明同前,示例如下:

Select 订单.[订单 ID], 员工.姓氏, 员工.名字

FROM 订单

RIGHT OUTER JOIN 员工 ON 订单.[员工 ID] = 员工.ID

ORDER BY 订单.[订单 ID];

这里我们连接表1(订单表)与表2(员工表),返回“员工”表中的所有记录,并返回订单表中与“员工”表关联匹配的记录,在无匹配的地方为NULL值。如图12-12所示:

12-12RIGHT JOIN(右外部连接)查询结果

五、FULL OUTER JOIN(全外部连接)查询

FULL OUTER JOIN(全外部连接)查询返回全部左表和右表的所有记录,如果两表有相匹配的记录就连接输出,如果无相匹配的,在左表或右表位置处显示NULL值。ACCESS SQL未直接提供FULL OUTER JOIN查询命令,不过我位可以变通一下来实现,就是用UNION关键字合并一个LEFT JOIN查询与一个RIGHT JOIN查询来实现FULL OUTER JOIN(全外部连接)查询的功能,示例语句如下:

Select 客户.公司, 订单.[订单 ID]

FROM 客户

LEFT OUTER JOIN 订单 ON 客户.ID = 订单.[客户 ID]

ORDER BY 客户.公司

UNION ALL

Select 客户.公司, 订单.[订单 ID]

FROM 客户

RIGHT OUTER JOIN 订单 ON 客户.ID = 订单.[客户 ID]

ORDER BY 客户.公司;

执行该查询后结果如图12-13所示,与其它数据库的FULL OUTER JOIN(全外部连接)查询的效果一样。

12-13ACCESS SQL实现的FULL JOIN效果

 



Access软件网官方交流QQ群 (群号:483923997)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

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