在介紹完資料正規化,明白不能全部資料通通塞到同一張後,
下個問題就是:我們要怎麼把不同表格的資料合在一起?,
這裡用到的語法就是JOIN,
JOIN分成很多種,常用的是INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN、UNION,
今天先介紹使用頻率最高的INNER JOIN。
以這張圖為例,假設兩個圈圈各代表一張表,
INNER JOIN就會取出兩張表聯集的紅色部分。
以我們的表為例,
如果我們想知道學生上的課程價錢,
那就要用student表的class連接到class的id,再看對應的課程費用。
語法如下:
SELECT * FROM student s INNER JOIN class c ON c.class=s.id;
這時就會出現兩個表聯集的資料,就是圖中紅色範圍,
如果在student插入一筆資料,class寫6:
INSERT INTO `education`.`student` (`id`, `birth_date`, `full_name`, `gender`, `class`, `start_date`) VALUES ('16', '2010-11-12', 'Amy', 'F', '6', '2020-10-03');
再重新用INNER JOIN選兩張表
SELECT * FROM student s INNER JOIN class c ON c.class=s.id;
會發現剛剛插入的class=6的資料並不會出現,
因為只有STUDENT表的class有6,但class的表並沒有6這個數字,
INNER JOIN要兩張表都有才會有,所以新插入的資料不會出現!
我們一般在寫SQL的時候會省略INNER,
直接寫成:
SELECT * FROM student s JOIN class c ON c.class=s.id;
至於要寫INNER JOIN還是JOIN,就看個人習慣囉!
SELECT * FROM student s INNER JOIN class c ON c.class=s.id;
這段寫反了,應該是
SELECT * FROM student s INNER JOIN class c ON s.class=c.id;