mysql中交集,並集,差集,左連線,右連線
阿新 • • 發佈:2019-01-01
學習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
結果: