1. 程式人生 > >mysql中交集,並集,差集,左連線,右連線

mysql中交集,並集,差集,左連線,右連線

         學習mysql也有一個月啦,在這個月中,都是按照需求對資料表進行一些基本操作,在這個過程當中,經常使用到左連線,右連線,交集,取差集等,現在對其基本操作進行歸納總結。

資料來源:

表一:                                                           

id    name     sex age                            

1mike1男  34                               
1mike2 男23                             
1mike3 女24                               
2mike1 男46                               
2mike2 男35
2mike3 男42
2mike4 男62
3mike1 女45
4mike5 男72
5mike4 女23

    表二:

id  school

1   北京大學

2  清華大學

3  哈佛大學

7  MIT

左連線:根據某個等值條件,對錶進行連線。本實驗是在id相同的情況下進行左連線

code:

select a.*,b.school 
FROM 
(SELECT * FROM mike1.test001) a
LEFT JOIN
(SELECT id,school FROM mike1.test003 ) b
ON a.id=b.id
結果如下:以表1為根基,對錶2進行連線,匹配相同的id號



右連線:以表2為根基,通過id相同的欄位對其進行右連線。

code:

select a.*,b.school 
FROM 
(SELECT * FROM mike1.test001) a
right JOIN
(SELECT id,school FROM mike1.test003 ) b
ON a.id=b.id

結果:


你們覺得結果是有問題還是沒有問題呢?  請留言

交集:通過id號相同,對錶1和表2進行內連線,取相同的部分,不相同的部分省略掉。

code:

select a.*,b.school 
FROM 
(SELECT * FROM mike1.test001) a
inner JOIN
(SELECT id,school FROM mike1.test003 ) b
ON a.id=b.id


結果:


差集:差集用的還是比較多的,類似於我們數學中學的,交、合、並等集合的操作。

code1:取表2與表1相同的部分,是我們上面取交集的第二種方法。

select a.id,a.name,a.sex,a.age,b.school 
FROM 
(SELECT * FROM mike1.test001) a
LEFT OUTER join
(SELECT id,school FROM mike1.test003 ) b
ON a.id=b.id
WHERE b.id IS NOT null

結果:


code2:取表1中的id在表2中的id的差值,最後列出資料。

select a.id,a.name,a.sex,a.age,b.school 
FROM 
(SELECT * FROM mike1.test001) a
LEFT OUTER join
(SELECT id,school FROM mike1.test003 ) b
ON a.id=b.id
WHERE b.id IS  null
結果: