请教left join的详细用法?

cbcool 2004-10-12 11:56:12
到底什么时候用left join什么时候用right join?
select a.*,b.* from TA a left join TB b on a.RID = b.RID

select a.*,b.* from TB a left join TA b on a.RID = b.RID
有什么不同?
谢谢!
...全文
269 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunshareforever 2004-10-12
  • 打赏
  • 举报
回复
select a.*,b.* from TA a left join TB b on a.RID = b.RID

select a.*,b.* from TB a left join TA b on a.RID = b.RID
有什么不同

使用left join 时:from 子句为主表,即保证了主表的数据完整性,left join 后是连表, 也做附加信息表,但得到的数据都是以from 子句的主表,来附加从表的信息。

使用right join时:与left join 正好反之,但用法是一样的。from接的是从表
Andy__Huang 2004-10-12
  • 打赏
  • 举报
回复
left join 左表一定是全部顯示出來的。但右表就不一定了

如﹕
select a.*,b.* from TA a left join TB b on a.RID = b.RID
TA表中的數據肯定會全部顯示出來﹐而TB表只有符合條件才選出來﹐不符合的用null填

a.id,a.name,b.id,b.name
1 aaa 1 bbb
2 xxx 2 qqq
3 kkk null null
。。。。
。。。。。。。。
查詢的結果大概是上面的樣子

yjzhg 2004-10-12
  • 打赏
  • 举报
回复
第一个是以TA为准,也就是选择TB表中存在于TA表的RID记录

第二个是以TB为准,也就是选择TA表中存在于TB表的RID记录


zjcxc 元老 2004-10-12
  • 打赏
  • 举报
回复
select a.*,b.* from TA a left join TB b on a.RID = b.RID

select a.*,b.* from TB b right join TA a on a.RID = b.RID
一样


select a.*,b.* from TA a right join TB b on a.RID = b.RID

select a.*,b.* from TB a left join TA b on a.RID = b.RID
一样
Hahahahahaha 2004-10-12
  • 打赏
  • 举报
回复
select a.*,b.* from TA a left join TB b on a.RID = b.RID

select a.*,b.* from TB a left join TA b on a.RID = b.RID
的不同:
1、字段次序不同(不解释)
2、纪录不同
select a.*,b.* from TA a left join TB b on a.RID = b.RID
包含TA有TB没有的RID
select a.*,b.* from TB a left join TA b on a.RID = b.RID
包含TB有TA没有的RID


哈,哈哈,哈哈哈......
zjcxc 元老 2004-10-12
  • 打赏
  • 举报
回复
left join 是取左边的所有
right join 是取右边的所有

这两个是相对表的位置来说的

select a.*,b.* from TA a left join TB b on a.RID = b.RID

select a.*,b.* from TB a left join TA b on a.RID = b.RID

前者是取 TA 表所有的记录+TB 表与之 RID 匹配的记录
后者是取 TB 表所有的记录+TA 表与之 RID 匹配的记录
Andy__Huang 2004-10-12
  • 打赏
  • 举报
回复
第一句左表全部的﹐加上右表符合條件的為一條記錄﹐如果右表沒有符合條件﹐用null填允。
Hahahahahaha 2004-10-12
  • 打赏
  • 举报
回复
select a.*,b.* from TA a left join TB b on a.RID = b.RID
=
select b.*,a.* from TB a right join TA b on a.RID = b.RID

select a.*,b.* from TA a left join TB b on a.RID = b.RID
的b.*可能为null

哈,哈哈,哈哈哈......


cbcool 2004-10-12
  • 打赏
  • 举报
回复
谢谢!

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧