Left join 和 Right join 的区别

乘风破浪dgg 2010-12-06 02:32:16
碰到一面试的问:

select * from A left join B on A.ID=B.ID



select * from B right join A on B.ID=A.ID

有区别吗?

我说没区别,他笑了。

弄得我很茫然。

高手解释下。。
...全文
205 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Juedaifanghua 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 juedaifanghua 的回复:]
你们说没区别的再 去试试吧 答案很肯定 我试了 有区别
[/Quote] 不好意思啊 眼神不好看错了 楼主结论没问题
今天刚接触 感觉通透了
Juedaifanghua 2011-05-05
  • 打赏
  • 举报
回复
你们说没区别的再 去试试吧 答案很肯定 我试了 有区别
abuying 2010-12-06
  • 打赏
  • 举报
回复
结果一样的!
他笑估计他也没看清
虽然 a left join b
但 在使用right join a,b表位置也换了,负负得正 b right join a
结果还是以A表作为基表
乘风破浪dgg 2010-12-06
  • 打赏
  • 举报
回复
现在大家都是这么说了,看来除了列序没有别的区别。ok谢谢大家。
billpu 2010-12-06
  • 打赏
  • 举报
回复
楼上几位 都没看清楼主的题目呀 楼主是这个意思,
用*的话是有区别但也只是列序的区别,分开指定结果如下
CREATE TABLE a(aid INT IDENTITY(1,1),
col1 VARCHAR(10))
CREATE TABLE b(bid INT IDENTITY(1,1),
col2 VARCHAR(10))


INSERT a SELECT 'a' UNION ALL
SELECT 'b' UNION ALL
SELECT 'c'

INSERT b SELECT 'a' UNION ALL
SELECT 'b' UNION ALL
SELECT 'd'


SELECT a.*,b.* FROM a LEFT JOIN b ON a.col1=b.col2
SELECT a.*,b.* FROM b RIGHT JOIN a ON a.col1=b.col2

/*
aid col1 bid col2
----------- ---------- ----------- ----------
1 a 1 a
2 b 2 b
3 c NULL NULL

(3 row(s) affected)

aid col1 bid col2
----------- ---------- ----------- ----------
1 a 1 a
2 b 2 b
3 c NULL NULL

(3 row(s) affected)


*/

水族杰纶 2010-12-06
  • 打赏
  • 举报
回复
除了结果集顺序不一样
貌似没啥区别
包括执行计划貌似也没啥区别
Crossgate_J 2010-12-06
  • 打赏
  • 举报
回复
有区别
otnto 2010-12-06
  • 打赏
  • 举报
回复
肯定有区别,基表不一样
CREATE TABLE L(ID INT,NAME VARCHAR(6))
CREATE TABLE R(ID INT,NAME VARCHAR(6))
INSERT INTO L(ID,NAME)VALUES(1,'A')
INSERT INTO L(ID,NAME)VALUES(2,'B')
INSERT INTO L(ID,NAME)VALUES(3,'C')

INSERT INTO L(ID,NAME)VALUES(3,'M')
INSERT INTO R(ID,NAME)VALUES(3,'D')
INSERT INTO R(ID,NAME)VALUES(4,'E')
INSERT INTO R(ID,NAME)VALUES(5,'F')

SELECT L.*,R.* FROM L LEFT JOIN R ON L.ID=R.ID
SELECT L.*,R.* FROM L RIGHT JOIN R ON L.ID=R.ID
SELECT L.*,R.* FROM L full outer JOIN R ON L.ID=R.ID
/*
ID NAME ID NAME
----------- ------ ----------- ------
1 A NULL NULL
2 B NULL NULL
3 C 3 D
3 M 3 D

(4 行受影响)

ID NAME ID NAME
----------- ------ ----------- ------
3 C 3 D
3 M 3 D
NULL NULL 4 E
NULL NULL 5 F

(4 行受影响)

ID NAME ID NAME
----------- ------ ----------- ------
1 A NULL NULL
2 B NULL NULL
3 C 3 D
3 M 3 D
NULL NULL 4 E
NULL NULL 5 F

(6 行受影响)
*/
billpu 2010-12-06
  • 打赏
  • 举报
回复
除了列序,其他还能有啥区别
wlgc123321 2010-12-06
  • 打赏
  • 举报
回复
有趣别的!!
一个是右边有空 一个是左边有空
乘风破浪dgg 2010-12-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jxqn_liu 的回复:]
还是有区别的!
左联接 返回包括左表中的所有记录和右表中联结字段相等的记录
右联接 返回包括右表中的所有记录和左表中联结字段相等的记录

http://topic.csdn.net/u/20100126/14/5bba5ec8-0aaf-4f94-b832-fb8fd6039f8a.html 下#5有示例的

楼主可以去研究研究
[/Quote]

看不出区别在什么地方啊?
jxqn_liu 2010-12-06
  • 打赏
  • 举报
回复
还是有区别的!
左联接 返回包括左表中的所有记录和右表中联结字段相等的记录
右联接 返回包括右表中的所有记录和左表中联结字段相等的记录

http://topic.csdn.net/u/20100126/14/5bba5ec8-0aaf-4f94-b832-fb8fd6039f8a.html 下#5有示例的

楼主可以去研究研究
guguda2008 2010-12-06
  • 打赏
  • 举报
回复
好像有区别,区别在于输出的列表前者是A在前,后者是B在前
guguda2008 2010-12-06
  • 打赏
  • 举报
回复
没区别,他笑是在夸奖你
chen8410 2010-12-06
  • 打赏
  • 举报
回复
你要当场问他有没有什么问题嘛
即使面试没过,说不定也能学到一两点
jiao3630 2010-12-06
  • 打赏
  • 举报
回复
这个么区别的
乘风破浪dgg 2010-12-06
  • 打赏
  • 举报
回复
我感觉也一样啊,哎,笑的我毛骨悚然!
kadboy 2010-12-06
  • 打赏
  • 举报
回复
应该一样的

34,590

社区成员

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

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