今天要介紹的是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是把表格直的加起來,
因為是直的加,所以表格欄位數量要相同,
但欄位名稱不用一樣,它是格子對格子,
表一的第一欄下面會接表二的第一欄。
語法如下
這裡用class加上student當示範,
但這沒什麼意義,因為兩張表的定義完全不同,
純粹練習用。
SELECT * FROM education.class
UNION
SELECT id,birth_date,full_name FROM education.student
ORDER BY ID;
加完以後可以看到結果是直的。
前面提到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終於結束了!!
接下來要介紹一些資料庫函式,
再介紹預存程序跟事件囉!