麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

表的內(nèi)連接、外連接(左連接與右連接)

2019-11-10 20:39:27
字體:
供稿:網(wǎng)友

聽同學(xué)說有校招筆試考到這個(gè)概念,一般沒有專門學(xué)習(xí)數(shù)據(jù)庫的話對(duì)這個(gè)都不是很了解,但是其實(shí)很簡(jiǎn)單,看到一篇博客對(duì)這個(gè)概念解釋的很清楚,故而轉(zhuǎn)載。

 有兩個(gè)表A和表B。  表A結(jié)構(gòu)如下:  Aid:int;標(biāo)識(shí)種子,主鍵,自增ID  Aname:varchar  數(shù)據(jù)情況,即用select * from A出來的記錄情況如下圖1所示:

 

表B結(jié)構(gòu)如下:  Bid:int;標(biāo)識(shí)種子,主鍵,自增ID  Bnameid:int  數(shù)據(jù)情況,即用select * from B出來的記錄情況如下圖2所示:圖2:B表數(shù)據(jù)  為了把Bid和Aid加以區(qū)分,不讓大家有誤解,所以把Bid的起始種子設(shè)置為100。  有SQL基本知識(shí)的人都知道,兩個(gè)表要做連接,就必須有個(gè)連接字段,從上表中的數(shù)據(jù)可以看出,在A表中的Aid和B表中的Bnameid就是兩個(gè)連接字段。  下圖3說明了連接的所有記錄集之間的關(guān)系:圖3:連接關(guān)系圖現(xiàn)在我們對(duì)內(nèi)連接和外連接一一講解。  1.內(nèi)連接:利用內(nèi)連接可獲取兩表的公共部分的記錄,即圖3的記錄集C  語句如下:Select * from A JOIN B ON A.Aid=B.Bnameid  運(yùn)行結(jié)果如下圖4所示:圖4:內(nèi)連接數(shù)據(jù)  其實(shí)select * from A,B where A.Aid=B.Bnameid與Select * from A JOIN B ON A.Aid=B.Bnameid的運(yùn)行結(jié)果是一樣的。  2.外連接:外連接分為兩種,一種是左連接(Left JOIN)和右連接(Right JOIN)  (1)左連接(Left JOIN):即圖3公共部分記錄集C+表A記錄集A1。  語句如下:select * from A Left JOIN B ON A.Aid=B.Bnameid  運(yùn)行結(jié)果如下圖5所示:圖5:左連接數(shù)據(jù)  說明:  在語句中,A在B的左邊,并且是Left Join,所以其運(yùn)算方式為:A左連接B的記錄=圖3公共部分記錄集C+表A記錄集A1  在圖3中即記錄集C中的存在的Aid為:2 3 6 7 8  圖1中即表A所有記錄集A中存在的Aid為:1 2 3 4 5 6 7 8 9  表A記錄集A1中存在的Aid=(圖1中即A表中所有Aid)-(圖3中即記錄集C中存在的Aid),最終得出為:1 4 5 9  由此得出圖5中A左連接B的記錄=圖3公共部分記錄集C+表A記錄集A1,  最終得出的結(jié)果圖5中可以看出Bnameid及Bid非NULL的記錄都為圖3公共部分記錄集C中的記錄;Bnameid及Bid為NULL的Aid為1 4 5 9的四筆記錄就是表A記錄集A1中存在的Aid。  (2)右連接(Right JOIN):即圖3公共部分記錄集C+表B記錄集B1。  語句如下:select * from A Right JOIN B ON A.Aid=B.Bnameid 運(yùn)行結(jié)果如下圖6所示:圖6:右連接數(shù)據(jù)  說明:  在語句中,A在B的左邊,并且是Right Join,所以其運(yùn)算方式為:A右連接B的記錄=圖3公共部分記錄集C+表B記錄集B1  在圖3中即記錄集C中的存在的Aid為:2 3 6 7 8  圖2中即表B所有記錄集B中存在的Bnameid為:2 3 6 7 8 11  表B記錄集B1中存在的Bnameid=(圖2中即B表中所有Bnameid)-(圖3中即記錄集C中存在的Aid),最終得出為:11  由此得出圖6中A右連接B的記錄=圖3公共部分記錄集C+表B記錄集B1,  最終得出的結(jié)果圖6中可以看出Aid及Aname非NULL的記錄都為圖3公共部分記錄集C中的記錄;Aid及Aname為NULL的Aid為11的記錄就是表B記錄集B1中存在的Bnameid。  總結(jié):  通過上面的運(yùn)算解說,相信很多人已經(jīng)想到,上面的情況(包括圖3的關(guān)系圖)說明的都只是A在B的左邊的情況,  以下語句B在A的右邊的又會(huì)出現(xiàn)什么情況呢??  select * from B Left JOIN A ON A.Aid=B.Bnameid  select * from B Right JOIN A ON A.Aid=B.Bnameid  其實(shí)對(duì)圖3左右翻轉(zhuǎn)一下就可以得出以下結(jié)論:  select * from B Left JOIN A ON A.Aid=B.Bnameid和select * from A Right JOIN B ON A.Aid=B.Bnameid所得出的記錄集是一樣的    而  select * from B Right JOIN A ON A.Aid=B.Bnameid和select * from A Left JOIN B ON A.Aid=B.Bnameid所得出的記錄集也是一樣的。

 

 


Another  Demo from  http://mouer.javaeye.com/blog/901153

Oracle的SQL語句常用的連接有內(nèi)連接(inner join),外連接(outer join)等,內(nèi)連接又包括等值連接,非等值連接,自連接;而外連接又分為左連接和右連接。其中默認(rèn)的是內(nèi)連接的等值連接。

內(nèi)連接:利用內(nèi)連接(等值)就可獲取公共部分C,圖中的數(shù)據(jù)集C.

select * from A inner join B on A.Aid=B.Bid;等價(jià)于select * from A,B where A.Aid=B.Bid 圖中C的部分

外連接:分為左外連接(left join)與右外連接(right join)左外連接:select * from A,B where A.Aid=B.Bid(+);等價(jià)于select * from A left outer joinB on A.id=B.id圖中A+C的部分

右外連接:select * from A,B where A.Aid(+)=B.Bid;等價(jià)于select * from Aright outer joinB on A.id=B.id圖中B+C的部分


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 精品一区在线视频 | 一区二区三区四区高清视频 | 国产亚洲精品久久777777 | 黄色片快播 | 毛片免费试看 | 妇女毛片 | 久久综合婷婷 | 精品国产一区二区亚洲人成毛片 | 久久久久国产一区二区三区不卡 | 激情视频免费观看 | 欧美日韩一 | 欧美成人免费在线视频 | a免费视频| 成年免费大片黄在线观看岛国 | 史上最强炼体老祖动漫在线观看 | 久久探花 | 龙的两根好大拔不出去h | 黄色网址入口 | 成人mm视频在线观看 | 免费一级在线观看 | 亚洲欧美日韩一区二区三区在线观看 | 日本看片一区二区三区高清 | 看免费一级毛片 | 特级a欧美做爰片毛片 | 激情小说激情图片激情电影 | 羞羞视频免费网站 | 一区在线视频 | 少妇色诱麻豆色哟哟 | 欧美日韩免费一区 | 欧美精品亚洲人成在线观看 | 欧美大穴| 三级国产三级在线 | 欧美成人精品不卡视频在线观看 | 娇喘视频在线观看 | 斗破苍穹在线观看免费完整观看 | 亚洲一区在线视频观看 | 日本特级a一片免费观看 | 久久生活片| 久久成人国产精品 | 日韩精品一区二区三区中文 | 日日做夜夜操 |