iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 21
0
AI & Data

作者超囉嗦,但一天只要十分鐘的MYSQL真.新手教學系列 第 21

第二十一日-把不同表格的資料合在一起:UNION、FULL JOIN

  • 分享至 

  • xImage
  •  

今天要介紹的是FULL JOIN和UNION,
FULL JOIN是不管重複不重複,
通通加在一起做撒尿牛丸!
也就是FULL JOIN會把兩張表的資料,
不管對不對的到,通通都顯示出來,
但是...MYSQL沒有FULL JOIN語法,
要自己用UNION組出一個。

LEFT JOIN就是靠左對齊,
RIGHT JOIN是靠右對齊,
INNER JOIN是兩邊都要有,
FULL JOIN是全部都有。

除了FULL JOIN外的JOIN,SELECT出的結果都是橫的

如果想要把不同表格的資料直的合併要用UNION
例如說:合併全學年的班級表,把班級一、班級二、班級三等等的表加在一起,
做成學年通訊錄,那就需要用直的合併。

  • UNION

UNION是把表格直的加起來,
因為是直的加,所以表格欄位數量要相同,
但欄位名稱不用一樣,它是格子對格子,
表一的第一欄下面會接表二的第一欄。

語法如下

  1. SELECT欄位FROM表一
  2. UNION
  3. SELECT欄位FROM表二
  4. (ORDER BY 欄位)

這裡用class加上student當示範,
但這沒什麼意義,因為兩張表的定義完全不同,
純粹練習用。

SELECT * FROM education.class 
UNION 
SELECT id,birth_date,full_name FROM education.student
ORDER BY ID;

加完以後可以看到結果是直的

  • FULL JOIN

前面提到FULL JOIN是不管重複不重複,
全部都要有,就像下圖。

那用UNION怎麼做到這個結果呢?

先LEFT JOIN 再 UNION RIGHT JOIN的結果
看圖片可以發現LEFT JOIN和RIGHT JOIN的結果正好就是FULL JOIN

寫成SQL的話會是

SELECT * FROM education.student s LEFT JOIN  class c ON s.class=c.id
UNION
SELECT * FROM education.student s RIGHT JOIN  class c ON s.class=c.id;

從圖中可以看到中間的圈圈會重複兩次,UNION會把重複的值濾掉喔!
如果不希望中間的圈圈被濾掉,可以使用UNION ALL


表格的JOIN終於結束了!!
接下來要介紹一些資料庫函式,
再介紹預存程序跟事件囉!


上一篇
第二十日-把不同表格的資料合在一起:LEFT/RIGHT JOIN
下一篇
第二十二日-MYSQL聚合函數:MAX、MIN、AVG、SUM、COUNT
系列文
作者超囉嗦,但一天只要十分鐘的MYSQL真.新手教學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言