sql join详解

ぃ、小莉子 提交于 2020-03-10 20:50:38

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

结果:

技巧

sql Left right join 多表 注意表的连接顺序

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!