數據表之間的鏈接關係

    這個博客不是我原創的是看到別人寫的以爲對我有幫助,摘抄過來的!!html

    原文連接  https://www.cnblogs.com/Ewin/archive/2009/10/05/1578322.htmlhtm

   在以前,我對My SQL中的內鏈接和外鏈接所得出的數據集不是很清楚。這幾天從新溫習了一下SQL的書本,如今的思路應該是很清楚了,如今把本身的理解發出來給你們溫習下。但願和我同樣對SQL的鏈接語句不太理解的朋友可以有所幫助。(發這麼菜的教程,各位大大們別笑話偶了,呵:D ) 有兩個表A和表B。表A結構以下: Aid:int;標識種子,主鍵,自增ID Aname:varchar 數據狀況,即用select * from A出來的記錄狀況以下圖1所示:
 blog

 


圖1:A表數據
表B結構以下: Bid:int;標識種子,主鍵,自增ID Bnameid:int 數據狀況,即用select * from B出來的記錄狀況以下圖2所示:
 
 


圖2:B表數據
爲了把Bid和Aid加以區分,不讓你們有誤解,因此把Bid的起始種子設置爲100。有SQL基本知識的人都知道,兩個表要作鏈接,就必須有個鏈接字段,從上表中的數據能夠看出,在A表中的Aid和B表中的Bnameid就是兩個鏈接字段。下圖3說明了鏈接的全部記錄集之間的關係:
 

圖3:鏈接關係圖 
如今咱們對內鏈接和外鏈接一一講解。 1.內鏈接:利用內鏈接可獲取兩表的公共部分的記錄,即圖3的記錄集C 語句以下:Select * from A JOIN B ON A.Aid=B.Bnameid 運行結果以下圖4所示:其實select * from A,B where A.Aid=B.Bnameid與Select * from A JOIN B ON A.Aid=B.Bnameid的運行結果是同樣的。
 
 
 
圖4:內鏈接數據

 2.外鏈接:外鏈接分爲兩種,一種是左鏈接(Left JOIN)和右鏈接(Right JOIN)
 (1)左鏈接(Left JOIN):即圖3公共部分記錄集C+表A記錄集A1。
 語句以下:select * from A Left JOIN B ON A.Aid=B.Bnameid 
運行結果以下圖5所示:
 
 


圖5:左鏈接數據     

說明:在語句中,A在B的左邊,而且是Left Join,因此其運算方式爲: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, 最終得出的結果圖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   運行結果以下圖6所示:
 get

 

 


圖6:右鏈接數據 
說明: 在語句中,A在B的左邊,而且是Right Join,因此其運算方式爲: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, 最終得出的結果圖6中能夠看出Aid及Aname非NULL的記錄都爲圖3公共部分記錄集C中的記錄;Aid及Aname爲NULL的Aid爲11的記錄就是表B記錄集B1中存在的Bnameid。    

交叉鏈接:兩張表聯合沒有條件狀況下,條數 = 圖1 * 圖2博客

相關文章
相關標籤/搜索