求解一道困扰我多年的MySQL面试题

LQW_home 2020-02-13 03:47:17
记得那年面试 问我 left join 和right join 什么区别 传统地回答了一边 说不对 他说要是照你这样说 左右表颠倒一下就行了 为什么还要发明 left right 当时就无语了 有人知道怎么回答吗?
...全文
260 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kampoo 2020-02-22
  • 打赏
  • 举报
回复
主要是你没讲清楚原理和工程经验,或者面试官也是半瓶子醋。说明1:在组合查询中,left join 和 right join可能需要混合使用,这种情况下你应该反问面试官怎么颠倒呢?(当然也可以强行只用一个,但不符合软件维护性要求)在工程经验中,不是因为效果类似就能否定其作用。 说明2:原理。数据库执行过程解释下,就很容易明白 t1 left join t2 跟 t2 right join t1必须一样的。不一样就是数据库出问题了。
引用 楼主 LQW_home 的回复:
记得那年面试 问我 left join 和right join 什么区别 传统地回答了一边 说不对 他说要是照你这样说 左右表颠倒一下就行了 为什么还要发明 left right 当时就无语了 有人知道怎么回答吗?
kampoo 2020-02-22
  • 打赏
  • 举报
回复
引用 4 楼 csdn_castiel 的回复:
表换过来也不一样的 select * from table2 a left join table1 b on a.id=b.id 这个结果是: id, id 1, 1 3, null
你看下用的数据库版本,如果不一致应该是有bug的。下面的脚本测试完全一致:
create table t1(id int primary key);
create table t2(id int primary key);
insert into t1 values(1),(2);
insert into t2 values(1),(3);

select * from t1
right join t2 on t1.id=t2.id;

select * from t2
left join t1 on t1.id=t2.id;
csdn_castiel 2020-02-15
  • 打赏
  • 举报
回复
表换过来也不一样的 select * from table2 a left join table1 b on a.id=b.id 这个结果是: id, id 1, 1 3, null
吉普赛的歌 2020-02-14
  • 打赏
  • 举报
回复
引用 2 楼 csdn_castiel 的回复:
table1 id 1 2 table2 id 1 3 select * from table1 a right join table2 b on a.id=b.id 这个结果是: id, id 1, 1 select * from table1 a left join table2 b on a.id=b.id 这个结果是: id, id 1, 1 2, null 结果完全不一样
你换了概念了, 要换成right, 表也要跟着换过来。 这面试官就是在找茬而已。
csdn_castiel 2020-02-13
  • 打赏
  • 举报
回复
table1 id 1 2 table2 id 1 3 select * from table1 a right join table2 b on a.id=b.id 这个结果是: id, id 1, 1 select * from table1 a left join table2 b on a.id=b.id 这个结果是: id, id 1, 1 2, null 结果完全不一样
  • 打赏
  • 举报
回复
你说的没错: t1 left join t2 等价于: t2 right join t1 这是我的博客文章,供你参考:《SQL 入门教程》第7篇 多表连接查询

56,675

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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