iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 19
0
AI & Data

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

第十九日-把不同表格的資料合在一起:聯集INNER JOIN

  • 分享至 

  • xImage
  •  

在介紹完資料正規化,明白不能全部資料通通塞到同一張後,
下個問題就是:我們要怎麼把不同表格的資料合在一起?
這裡用到的語法就是JOIN,
JOIN分成很多種,常用的是INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN、UNION,
今天先介紹使用頻率最高的INNER JOIN。

  • INNER JOIN:兩個都要有

以這張圖為例,假設兩個圈圈各代表一張表,
INNER JOIN就會取出兩張表聯集的紅色部分。

以我們的表為例,
如果我們想知道學生上的課程價錢,
那就要用student表的class連接到class的id,再看對應的課程費用。

語法如下:

  1. 資料選取語法
  2. 第一張表的簡寫(從這之後,s代表student這張表)
  3. INNER JOIN
  4. 第二張表的簡寫(之後提到c都是代表class表)
  5. ON
  6. 第一張表的某欄位=第二張表的某欄位
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,就看個人習慣囉!


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

1 則留言

0
kouhei
iT邦新手 5 級 ‧ 2023-10-26 12:01:17
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;

我要留言

立即登入留言