问个问题,关于表链接,是选择左连还是右连的问题......

猴头 2015-11-18 12:21:55
1、有一个 表A 和一个 表B,
A 和 B 是 多对一的关系,
其中 表A 中 有一个字段 是 表B的主键,

并且 我要查询的数据 主要 在 A 表中,

那我该选择 A 左连 B 还是 B左连 A???

2、如果 表A 和 表B 是 一对多 的关系,
表B 中 有一个字段 是 表A 的主键,

并且 我要查的主要数据 还是 在 表A 中,

这是 我 该选择 A 左链接 B 还是 B 左链接 A???


如果按照我以往的习惯,主要数据在哪个表中,那就用哪个表做主表,
所以对已 1 和 2 ,我 都是选择的 A 左链接 B,这样 有问题吗??? 会出现什么问题???

另外:

3、 A left join B 和 B right join A 结果一样吗???
4、left join 和 left outer join一样吗?
5、A 表中有一个字段 Bid 对应 B表的主键 Id,主外键关系 该怎么叫? Bid 是 表B在 表A中的外键?




...全文
140 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yole 2015-11-19
  • 打赏
  • 举报
回复
YES~
猴头 2015-11-18
  • 打赏
  • 举报
回复
引用 10 楼 u010192842 的回复:
兄弟~测试数据都给您了,您试一下自己看结果呗~~一目了然!
我模拟了一边

create table ta  
(   
    id int identity(1,1),
    Name varchar(20)   
)   
insert ta   
select '张三' union all
select '李四' union all
select '王二' 

create table tb  
(   
    id int identity(1,1),
    aid varchar(20)   
)   
go   
insert tb   
select '1'union all
select '1'union all
select '1'union all
select '2'union all
select '2'union all
select '3'union all
select '3'union all
select '3'union all
select '3'
 
 select * from tb;
 select * from ta;

 select ta.id aid,ta.Name,tb.id bid,tb.aid baid from ta left join tb on ta.id = tb.aid;
 
 drop table ta;
 drop table tb;
针对 2 情况 a 表 和 b 表 是一对多的关系,b 中 有一个字段是a的主键,链接语句 a left join b: select ta.id aid,ta.Name,tb.id bid,tb.aid tbaid from ta left join tb on ta.id = tb.aid; 链接结果: 1 张三 1 1 1 张三 2 1 1 张三 3 1 2 李四 4 2 2 李四 5 2 3 王二 6 3 3 王二 7 3 3 王二 8 3 3 王二 9 3 是不是 就是 在 a 左链接 b 的时候 ,针对 a中的每一条记录 r ,都会在 b中找到 所有 和 r 相匹配的所有记录插入到结果集中,而不是 仅仅 在 b 中找到一条匹配的记录,就 开始 查 a中的下一条记录。 这话的逻辑对吗?
Yole 2015-11-18
  • 打赏
  • 举报
回复
兄弟~测试数据都给您了,您试一下自己看结果呗~~一目了然!
猴头 2015-11-18
  • 打赏
  • 举报
回复
引用 8 楼 u010192842 的回复:

create table #A   
(   
    id int,
    Name varchar(20)   
)   
insert #A   
select 1,'张三' union all
select 1,'李四' union all
select 3,'王二' 
create table #B   
(   
    id int,
    aid varchar(20)   
)   
go   
insert #B   
select 1,'2,3'

select * from #b a left join #a b on a.id =b.ID
select * from #a a left outer join #b b on a.id =b.ID

drop table #A
drop table #B

给您测试数据,您自己连一下。要啥样的结果自己join~
那么 针对 2 这个情况 ,如果 a left join b, b中有多条数据,b1,b2,b3,b4....和a中的 记录 a1 都对应,那么 b1,b2,b3,b4...都会被列出来吗??? 结果集类似 a1 b1 a1 b2 a1 b3 a1 b4 ... ?
Yole 2015-11-18
  • 打赏
  • 举报
回复

create table #A   
(   
    id int,
    Name varchar(20)   
)   
insert #A   
select 1,'张三' union all
select 1,'李四' union all
select 3,'王二' 
create table #B   
(   
    id int,
    aid varchar(20)   
)   
go   
insert #B   
select 1,'2,3'

select * from #b a left join #a b on a.id =b.ID
select * from #a a left outer join #b b on a.id =b.ID

drop table #A
drop table #B

给您测试数据,您自己连一下。要啥样的结果自己join~
fengcheliu 2015-11-18
  • 打赏
  • 举报
回复
3、 A left join B 和 B right join A 结果一样吗??? 4、left join 和 left outer join一样吗? 3、4 是完全一样的
Yole 2015-11-18
  • 打赏
  • 举报
回复
不会有问题,只不过数据行数与a一致。
fengcheliu 2015-11-18
  • 打赏
  • 举报
回复
Bid是B表的主键,是A表的外键
fengcheliu 2015-11-18
  • 打赏
  • 举报
回复
引用 3 楼 yan_hyz 的回复:
[quote=引用 2 楼 u010192842 的回复:] 1、a左连b 2、b左连a 3、一样 4、一样 5、Bid是外键(FK)
那么 对于 2 如果 用 a左连b会有什么问题吗?[/quote] 你测试一下,会发现不一样的。 另外,你最好给出测试数据,针对情况2,如果要取的数据在A中,无论A LJ B 还是B LJ A,都会生成重复的A记录
猴头 2015-11-18
  • 打赏
  • 举报
回复
引用 2 楼 u010192842 的回复:
1、a左连b 2、b左连a 3、一样 4、一样 5、Bid是外键(FK)
那么 对于 2 如果 用 a左连b会有什么问题吗?
Yole 2015-11-18
  • 打赏
  • 举报
回复
1、a左连b 2、b左连a 3、一样 4、一样 5、Bid是外键(FK)
yooq_csdn 2015-11-18
  • 打赏
  • 举报
回复
select a.a,b.b from a left join b on a.id=b.id 会显示 全部 a.a ,如果b中没对饮值,显示 null

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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