表与表之间的连接

其实,表A与表B的连接和高中时候学的集合是一样的。

要让两个表能够连接,必须有字段是一样的,或者说,是通过这个字段联系这两张表的。

比如表A是员工表,员工表里有一个字段为dept_id。表B是部门表,部门表的主键id就可以和dept_id联系起来。

用Venn图很容易表示表与表连接的几种情况:

(经常有人问:表与表有哪几种连接?)

1,2
在这里插入图片描述
3,4
在这里插入图片描述
5,6
在这里插入图片描述
7
在这里插入图片描述

整两张表来说明情况:

员工表字段:
id,姓名,部门id。

部门表字段:
id,部门名字,楼层。

插入一些数据:


RD是research department,HR是human resource,MK是marketing,MIS是management information system,FD是financial department。这些都是部门的名字。

看一下员工表,发现9号员工ocean他的部门没有在部门表中有对应。

同样的,在部门表中,5号部门也没有任何员工和他对应。

这样的设计是为了演示的方便。


先来简单的,我们看第2个inner join,要的是两张表的公共部分:

然后是熟悉的left join,A的独有+AB的共有:


比上面多了一条A独有的记录。

同样的,right join就是B的独有+AB的共有:


5,6都搞定了。

现在我们看3,4。

3是A的独有。所以我们要在left join的基础上去掉AB的共有。


这就是A的独有。

同样的,

这是B的独有。

我们看最后一个7。

它是A的独有拼上B的独有,有了3和4的基础,接下来只要union一下就可以了。


这就是A的独有加上B的独有。

或许你会说,图上不是用full outer join吗?对的,但是mysql不支持这样的语法。

最后我们看1。

它是4和5的结合:


A的独有+B的独有+AB的共有。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章