主頁 > 知識(shí)庫(kù) > MSSQL內(nèi)外連接(INNER JOIN)語句詳解

MSSQL內(nèi)外連接(INNER JOIN)語句詳解

熱門標(biāo)簽:百度地圖標(biāo)注信息怎么修改 沈陽外呼系統(tǒng)有效果嗎 福州外呼系統(tǒng)招商 四川穩(wěn)定外呼系統(tǒng)公司 怎么在高德地圖標(biāo)注多個(gè)點(diǎn) AI智能云呼電話機(jī)器人怎么注冊(cè) 溫州語音外呼系統(tǒng)排名 電話機(jī)器人接口是什么樣的 商家地圖標(biāo)注圖片

在之前,我對(duì)MSSQL中的內(nèi)連接和外連接所得出的數(shù)據(jù)集不是很清楚。這幾天重新溫習(xí)了一下SQL的書本,現(xiàn)在的思路應(yīng)該是很清楚了,現(xiàn)在把自己的理解發(fā)出來給大家溫習(xí)下。希望和我一樣對(duì)SQL的連接語句不太理解的朋友能夠有所幫助。(發(fā)這么菜的教程,各位大大們別笑話偶了,呵:D )

有兩個(gè)表A和表B。
表A結(jié)構(gòu)如下:
Aid:int;標(biāo)識(shí)種子,主鍵,自增ID
Aname:varchar

數(shù)據(jù)情況,即用select * from A出來的記錄情況如下圖1所示:


圖1:A表數(shù)據(jù)

表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所得出的記錄集也是一樣的。

第一次寫類似教程的貼子,希望和我一樣對(duì)SQL的連接語句不太理解的朋友能夠有所幫助。謝謝大家支持。

您可能感興趣的文章:
  • MySQL表LEFT JOIN左連接與RIGHT JOIN右連接的實(shí)例教程
  • MySQL的LEFT JOIN表連接的進(jìn)階學(xué)習(xí)教程
  • 在MySQL中使用JOIN語句進(jìn)行連接操作的詳細(xì)教程
  • SQL語句的并集UNION 交集JOIN(內(nèi)連接,外連接)等介紹
  • MySQL查詢優(yōu)化:連接查詢排序limit(join、order by、limit語句)介紹
  • sql 左連接和右連接的使用技巧(left join and right join)
  • MSSQL內(nèi)連接inner join查詢方法
  • SQL JOIN 連接詳細(xì)介紹及簡(jiǎn)單使用實(shí)例

標(biāo)簽:汕尾 西寧 七臺(tái)河 營(yíng)口 無錫 寶雞 邯鄲 來賓

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MSSQL內(nèi)外連接(INNER JOIN)語句詳解》,本文關(guān)鍵詞  MSSQL,內(nèi)外,連接,INNER,JOIN,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MSSQL內(nèi)外連接(INNER JOIN)語句詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于MSSQL內(nèi)外連接(INNER JOIN)語句詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章