sql join詳解


inner join(等值連接)

默認join方式,如果不加修飾詞
只返回兩個表中聯結字段相等的行

left join(左連接)

返回包括左表中的所有記錄和右表中聯結字段相等

right join(右連接)

與左連接相反

full join(全連接)

返回左表和右表中的所有行。當某行在另一個表中沒有匹配行時,則另一個表的選擇列表列包含空值。
即左連接、右連接結果的合並

非等連接

使用等值以外的條件來匹配左、右兩個表中的行

select A.c1,B.c2 from A join B on A.c3 != B.c3;

舉例說明

表Article和表ArticleComment分別表示“文章”和“文章評論”,ArticleComment有Article外鍵ArticleId。表設計為:


表Article數據如下:

表ArticleComment數據如下:

需要注意的是,嚴格來說,任意的ArticleComment都應該有外鍵ArticleId,這里為了說明join,沒有嚴格要求,ArticleId可以為空。

inner join(等值連接)

select Article.Id,Article.Name,ArticleComment.Id as 'ArticleCommentId',ArticleComment.[Content],ArticleComment.ArticleId 
from Article
join ArticleComment on Article.Id=ArticleComment.ArticleId

結果:

left join(左連接)

select Article.Id,Article.Name,ArticleComment.Id as 'ArticleCommentId',ArticleComment.[Content],ArticleComment.ArticleId 
from Article
left join ArticleComment on Article.Id=ArticleComment.ArticleId

結果:

right join(右連接)

select Article.Id,Article.Name,ArticleComment.Id as 'ArticleCommentId',ArticleComment.[Content],ArticleComment.ArticleId 
from Article
right join ArticleComment on Article.Id=ArticleComment.ArticleId

結果:

full join(全連接)

select Article.Id,Article.Name,ArticleComment.Id as 'ArticleCommentId',ArticleComment.[Content],ArticleComment.ArticleId 
from Article
full join ArticleComment on Article.Id=ArticleComment.ArticleId

結果:

非等連接

select Article.Id,Article.Name,ArticleComment.Id as 'ArticleCommentId',ArticleComment.[Content],ArticleComment.ArticleId 
from Article
join ArticleComment on Article.Id!=ArticleComment.ArticleId

結果:

技巧

Left right join 多表的連接順序
多表左/右連接,表的連接順序也可以影響查詢速度
左連接時,應該把小表放在前面連接
例子:
A、B、C三表左連接
情況1:
A先和B連接,得到100條記錄
100條記錄再和C左連接
情況2:
A先和C連接,得到50條記錄
50條記錄再和B左連接

右連接時,把小表放在后面連接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM