18、 左右内连接的区别

举个例子
参加同学聚会,分别有男生、女生表。其中右边表示家庭的编号。

一、左连接

1.1、以boy表为准做左连接

现在,主持人说,所有男士站到舞台上,带上自己的配偶(没有配偶的拿块牌子,上面写null)
问:屌丝上不上舞台呢?没有对应的行(配偶)怎么办?
答:上(因为是所有男士),没有的话用null补齐。

按照上面的想法,结果如下:
其中“高富帅”需要占两行才能写的完。

若是想,高富帅一行,对应的女生姓名字段存两个,或者把第二名女生舍弃,这都是不允许的。一个列里存储的值,是最小的单位不能拆分的,所以不能存两个值。

所以,五个男生,不一定就是五行结果集。。

按照上面所举栗子,我们用sql创建两个表:

然后插入数据。得到这样两张表:

我们用左连接,on条件是other相同,得到结果集如下:

可见与我们分析推测的一样。

这种情况就是左连接: 男生 left join on 女生。

1.2、以girl表为准做左连接。

现在,我们让女生上台,领对象,没有对象的用null补齐。
注意下表中,select查询时中我们把boy表放在了左边,其实在left join 时,还是以girl表为准。

在以boy在左边用left join时,屌丝是null补齐。以girl在左边用left join 时,宝钗没有配偶,用null补齐。

————————————————————————————————————
左右连接是可以互换的
A left join B 等价于 B right join A
————————————————————————————————————

二、右连接

还是上面的题目,同样是女生上台带另一半,没有的用Null补齐,但是不允许用左连接来做。

也比较简单。

用右连接的话,只需要:男 right join 女即可。如下图:

可见结果是一样的,不必要可以的区分左右连接。

额外建议:

出于移值时兼容性方面的考虑,尽量用左连接。

三、内连接

内连接的特点:
主持人又说,所有有配偶的男生/女生,走到舞台上来,结果会是神马样?
这时候,屌丝,宝钗都不会上台了。应该是如下的结果:

如果从集合的角度看,内连接就是左右连接的交集

四、外连接

也就是,左右连接的并集。但是在MySQL中不支持,在SQL server中支持。

你可能感兴趣的:(18、 左右内连接的区别)