left join,right join,inner join,full join用法

[left join,right join,inner join,full join之間的區(qū)別]

sql中的連接查詢有inner join(內(nèi)連接)、left join(左連接)、right join(右連接)、full join(全連接)四種方式,它們之間其實(shí)并沒(méi)有太大區(qū)別,僅僅是查詢出來(lái)的結(jié)果有所不同。
例如我們有兩張表:


這里寫圖片描述

Orders表通過(guò)外鍵Id_P和Persons表進(jìn)行關(guān)聯(lián)。

1.inner join(內(nèi)連接),在兩張表進(jìn)行連接查詢時(shí),只保留兩張表中完全匹配的結(jié)果集。

我們使用inner join對(duì)兩張表進(jìn)行連接查詢,sql如下:

SELECT p.LastName, p.FirstName, o.OrderNo FROM Persons p INNER JOIN Orders o ON p.Id_P=o.Id_P and 1=1  --用and連接多個(gè)條件 ORDER BY p.LastName

查詢結(jié)果集:


這里寫圖片描述

此種連接方式Orders表中Id_P字段在Persons表中找不到匹配的,則不會(huì)列出來(lái)。

注意:?jiǎn)渭兊膕elect * from a,b是笛卡爾乘積。比如a表有5條數(shù)據(jù),b表有3條數(shù)據(jù),那么最后的結(jié)果有53=15條數(shù)據(jù)。*

但是如果對(duì)兩個(gè)表進(jìn)行關(guān)聯(lián):select * from a,b where a.id = b.id 意思就變了,此時(shí)就等價(jià)于:

select * from a inner join b on a.id = b.id。即就是內(nèi)連接。

但是這種寫法并不符合規(guī)范,可能只對(duì)某些數(shù)據(jù)庫(kù)管用,如sqlserver。推薦最好不要這樣寫。最好寫成inner join的寫法。

內(nèi)連接查詢 (select * from a join b on a.id = b.id) 與 關(guān)聯(lián)查詢 (select * from a , b where a.id = b.id)的區(qū)別

2.left join,在兩張表進(jìn)行連接查詢時(shí),會(huì)返回左表所有的行,即使在右表中沒(méi)有匹配的記錄。

我們使用left join對(duì)兩張表進(jìn)行連接查詢,sql如下:

SELECT p.LastName, p.FirstName, o.OrderNo FROM Persons p LEFT JOIN Orders o ON p.Id_P=o.Id_P ORDER BY p.LastName

查詢結(jié)果如下:


這里寫圖片描述

可以看到,左表(Persons表)中LastName為Bush的行的Id_P字段在右表(Orders表)中沒(méi)有匹配,但查詢結(jié)果仍然保留該行。

3.right join,在兩張表進(jìn)行連接查詢時(shí),會(huì)返回右表所有的行,即使在左表中沒(méi)有匹配的記錄。

我們使用right join對(duì)兩張表進(jìn)行連接查詢,sql如下:

SELECT p.LastName, p.FirstName, o.OrderNo FROM Persons p RIGHT JOIN Orders o ON p.Id_P=o.Id_P ORDER BY p.LastName

查詢結(jié)果如下:

這里寫圖片描述

Orders表中最后一條記錄Id_P字段值為65,在左表中沒(méi)有記錄與之匹配,但依然保留。

4.full join,在兩張表進(jìn)行連接查詢時(shí),返回左表和右表中所有沒(méi)有匹配的行。

我們使用full join對(duì)兩張表進(jìn)行連接查詢,sql如下:

SELECT p.LastName, p.FirstName, o.OrderNo FROM Persons p FULL JOIN Orders o ON p.Id_P=o.Id_P ORDER BY p.LastName

查詢結(jié)果如下:


這里寫圖片描述

查詢結(jié)果是left join和right join的并集。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容