其實,表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的共有。