精通MS-ACCESS SQL之基础篇(12)
时 间:2017-12-01 16:12:33
作 者:Big Young ID:252 城市:襄阳
摘 要: ACCESS SQL的JOIN(连接)查询。
正 文:
第十二节 ACCESS SQL的JOIN(连接)查询
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)中表间关系
从图12-1我们可以明确发现,INNER JOIN(内部连接)查询的目的是要找出两个相关联的表中有交叉的记录,就是两者的交集。
1、INNER JOIN(内部连接)查询语法
INNER JOIN(内部连接)查询的SQL语句的语法为:
Select column_name(s)
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name;
这里的“column_name(s)”是查询中将要显示或提取出的字段的列表或叫数据列的列表;“table1”及“table2”是将要对其进行JOIN(连接)查询的第一个表与第二个表的名字;ON关键字后的“table1.column_name = table2.column_name”是关系表达式,用于测试两表相关字段的关系,用于筛选它们的交集。
2、INNER JOIN(内部连接)查询实例
这里我们使用MS ACCESS自带的示例数据库中的表作为例子数据来说明问题,先看一看“订单”表,如图12-5所示:
图12-5:订单表中的数据行
再来浏览一下“客户”表的内容,如图12-6所示:
图12-6:客户表中的数据行
下面我们使用JOIN(连接)查询的SQL语句来查询所有订单的客户信息,如图12-7所示:
图12-7:JOIN(连接)查询语句示例
此查询执行后的结果如图12-8所示:
图12-8:JOIN(连接)查询的结果
JOIN(连接)查询也可以实现三个表及以上的多表查询,查询语句如图12-9所示:
图12-9:三个表的JOIN(连接)查询
需要注意的是,在ACCESS SQL中JOIN(连接)三个表及更多表的查询中,后续的JOIN语句均需加上圆括号,不然系统会报错。查询后的结果如图12-10所示:
图12-10:三表JOIN(连接)查询结果
三、LEFT JOIN(左外部连接)查询
MS ACCESS SQL的LEFT JOIN(左外部连接)查询返回左表(即第一个表:表1)的全部记录,同时连接返回右表(即第二个:表2)中与表1相匹配的记录,如果表2中没有相应的与表1相匹配的记录,则返回的右表位置部分为NULL值。
1、LEFT JOIN(左外部连接)查询的基本语法
Select column_name(s)
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name;
语法结构中的项目与前面INNER JOIN查询语法中的是一样的,大家可以参考前面的内容,这里不再是赘述,需要说明的是:在MS ACCESS SQL的LEFT JOIN查询中,OUTER这个关键字是可以省略掉的,这一点应注意。
2、LEFT JOIN查询实例
我们不是以前面用过的“罗斯文商贸”示例数据库中的“订单”表及“客户”表为例来说明LEFT JOIN(左外部连接)查询的基本用法。
我们把“客户”表作为左表即表1,“订单”表作为右表即表2,用下面的语句进行查询:
Select 客户.公司, 订单.[订单 ID]
FROM 客户
LEFT OUTER JOIN 订单 ON 客户.ID = 订单.[客户 ID]
ORDER BY 客户.公司;
执行查询后得到如图12-11所示的效果:
图12-11:LEFT 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-12:RIGHT 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-13:ACCESS SQL实现的FULL JOIN效果
Access软件网官方交流QQ群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
- Access仿平台的多值选择器...(10.24)
- 【Access日期区间段查询】...(10.22)
- 【Access源码示例】VBA...(10.12)
- Access累乘示例,Acce...(10.09)
- 数值8.88,把整数8去掉,转...(10.08)
- 【Access自定义函数】一个...(09.30)
- 【Access选项卡示例】Ac...(09.09)
学习心得
最新文章
- Access系统自带的日期选择器不...(11.08)
- 分享一下Access工程中的acw...(11.07)
- Access快速开发平台--让有权...(11.04)
- Access快速开发平台--审批选...(11.01)
- ACCESS两张表先各自排序,然后...(10.31)
- Access对子窗体数据进行批量+...(10.30)
- SqlServer中如何用SQL命...(10.29)
- Access报表中的分组功能用代码...(10.28)
- 用Access计算库存结余的一个方...(10.26)
- 最精简的组合框行来源数据快速输入(...(10.25)