AccessSQL中LeftJoin、RightJoin和InnerJoin的使用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

AccessSQL中LeftJoin、RightJoin和InnerJoin的使⽤
1、表结构
表A 表B
2、Left Join
⽰例:2.1
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的。

换句话说,左表A的记录将会全部表⽰出来,⽽右表B 只会显⽰符合搜索条件的记录(例⼦中为: A.aid = B.bid),B表记录不⾜的地⽅均为NULL.
A表所有记录都会显⽰,A表中没有被匹配的⾏(如aid=5、6的⾏)相应内容则为NULL。

返回的记录数⼀定⼤于A表的记录数,如A表中aid=7⾏被B表匹配了3次(因为B表有三⾏bid=7)。

注意:在Access中A.aid、B.bid不能缩写成aid、bid,否则会提⽰“不⽀持链接表达式”,这⼀点不同于Where查询。

3、Right Join
⽰例:3.1
仔细观察⼀下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不⾜的地⽅⽤NULL填充。

4、Inner Join
⽰例:4.1
这⾥只显⽰出了 A.aid = B.bid的记录.这说明inner join并不以谁为基础,它只显⽰符合条件的记录。

inner join 等同于Where查询如:
5、表的关联修改和删除
5.1修改
⽰例:5.1.1
上述SQL实际操作的表为"Select * From A left join B on A.aid = B.bid",因此Access会提⽰更新13条记录(Select查询出的记录就是13条)。


⽐“⽰例:2.1”返回的结果,分析update后的A表:
aid=5、6的记录,被更新为NULL
aid=7的记录,被更新了3次,依次是“b1997-1”、“b1997-2”、“b1997-3”,因此其结果为最后⼀次更新“b1997-3”
对于上述SQL同样可以将“A.aname = B.bname”改成“B.bname = A.aname”,执⾏后B表将会被修改,但是执⾏后B表会增加三⾏“0, a2005-1;0,
a2005-2;0, a2006”,这也不难理解,因为Left Join执⾏后,B表会出现三⾏空值。

⽰例:5.1.2
Where条件查询在上⾯的SQL中同样可以使⽤,其作⽤的表也是Select查询出的关联表。

如下SQL
执⾏后A表的结果:
对⽐第⼀次update可以发现,aid=5的并没有被更新。

这⾥只讲述left join,因为right join 和 inner join的处理过程等同于left join。

另外Access中update语句中不能含有From关键字,这⼀点不同于其他数据库。

5.2删除
在Access中是不可以通过Left Join、Right Join、Inner Join来删除某张表的记录
⽰例:5.2.2
上述SQL的本意是删除A表中aid=1的记录,但执⾏后表A和表B均未发⽣任何变化。

若想实现此⽬的,下述SQL可以实现
6、笛卡尔积
如果A表有20条记录,B表有30条记录,则⼆者关联后的笛卡尔积⼯20*30=600条记实录。

也就是说A表中的每条记录都会于B表的所有记录关联⼀次,三种关联⽅式实际上就是对“笛卡尔积”的处理⽅式不同。

相关文档
最新文档