Access SQL中Left Join、Right Join和Inner Join的使用
1、表結(jié)構(gòu)
表A ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 表B
2、Left Join
示例:2.1
Select * From A left join B on A.aid = B.bid;left join是以A表的記錄為基礎(chǔ)的,A可以看成左表,B可以看成右表,left join是以左表為準(zhǔn)的。 換句話說,左表A的記錄將會(huì)全部表示出來,而右表B只會(huì)顯示符合搜索條件的記錄(例子中為: A.aid = B.bid),B表記錄不足的地方均為NULL.
- A表所有記錄都會(huì)顯示,A表中沒有被匹配的行(如aid=5、6的行)相應(yīng)內(nèi)容則為NULL。
- 返回的記錄數(shù)一定大于A表的記錄數(shù),如A表中aid=7行被B表匹配了3次(因?yàn)锽表有三行bid=7)。
注意:在Access中A.aid、B.bid不能縮寫成aid、bid,否則會(huì)提示“不支持鏈接表達(dá)式”,這一點(diǎn)不同于Where查詢。
3、Right Join
示例:3.1
Select * From A right join B on A.aid = B.bid;仔細(xì)觀察一下,就會(huì)發(fā)現(xiàn),和left join的結(jié)果剛好相反,這次是以右表(B)為基礎(chǔ)的,A表不足的地方用NULL填充。
4、Inner Join
示例:4.1
Select * From A inner join B on A.aid = B.bid;這里只顯示出了 A.aid = B.bid的記錄.這說明inner join并不以誰為基礎(chǔ),它只顯示符合條件的記錄。
inner join 等同于Where查詢?nèi)?#xff1a;
Select * From A, B Where A.aid = B.bid5、表的關(guān)聯(lián)修改和刪除
5.1修改
示例:5.1.1
update A left join B on A.aid = B.bid set A.aname = B.bname上述SQL實(shí)際操作的表為"Select * From A left join B on A.aid = B.bid",因此Access會(huì)提示更新13條記錄(Select查詢出的記錄就是13條)。對(duì)比“示例:2.1”返回的結(jié)果,分析update后的A表:
- aid=5、6的記錄,被更新為NULL
- aid=7的記錄,被更新了3次,依次是“b1997-1”、“b1997-2”、“b1997-3”,因此其結(jié)果為最后一次更新“b1997-3”
對(duì)于上述SQL同樣可以將“A.aname = B.bname”改成“B.bname = A.aname”,執(zhí)行后B表將會(huì)被修改,但是執(zhí)行后B表會(huì)增加三行“0, a2005-1;0, a2005-2;0, a2006”,這也不難理解,因?yàn)長(zhǎng)eft Join執(zhí)行后,B表會(huì)出現(xiàn)三行空值。
示例:5.1.2
Where條件查詢?cè)谏厦娴腟QL中同樣可以使用,其作用的表也是Select查詢出的關(guān)聯(lián)表。如下SQL
update A left join B on A.aid = B.bid set A.aname = B.bname where A.aid <> 5執(zhí)行后A表的結(jié)果:
對(duì)比第一次update可以發(fā)現(xiàn),aid=5的并沒有被更新。
這里只講述left join,因?yàn)閞ight join 和 inner join的處理過程等同于left join。另外Access中update語句中不能含有From關(guān)鍵字,這一點(diǎn)不同于其他數(shù)據(jù)庫。
5.2刪除
在Access中是不可以通過Left Join、Right Join、Inner Join來刪除某張表的記錄
示例:5.2.2
Delete From A inner join B on A.aid = B.bid where B.bname = "b1991"上述SQL的本意是刪除A表中aid=1的記錄,但執(zhí)行后表A和表B均未發(fā)生任何變化。若想實(shí)現(xiàn)此目的,下述SQL可以實(shí)現(xiàn)
Delete From A Where A.aid In (Select bid From B Where B.bname="b1991")6、笛卡爾積
如果A表有20條記錄,B表有30條記錄,則二者關(guān)聯(lián)后的笛卡爾積工20*30=600條記實(shí)錄。也就是說A表中的每條記錄都會(huì)于B表的所有記錄關(guān)聯(lián)一次,三種關(guān)聯(lián)方式實(shí)際上就是對(duì)“笛卡爾積”的處理方式不同。
總結(jié)
以上是生活随笔為你收集整理的Access SQL中Left Join、Right Join和Inner Join的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 30分钟LINQ教程
- 下一篇: css的定位机制