CodeGym /課程 /SQL SELF /資料合併入門:JOIN

資料合併入門:JOIN

SQL SELF
等級 11 , 課堂 0
開放

今天我們要來聊聊關聯式資料庫裡最有趣的主題之一——怎麼用 JOIN 把多個資料表的資料合在一起。這個功能超強大,能讓你建立複雜的關聯跟做分析。

想像一下,你的資料庫就像一本超大的漫畫,每個分開的資料表就是一個分鏡。要拼湊出完整的故事,你就得把這些分鏡連起來。這時 JOIN 就派上用場啦。資料合併就是讓查詢可以從多個資料表抓資料,然後根據你設定的條件把它們串起來。

關聯式資料庫的核心就是資料表之間的關聯概念。每個資料表都存一種特定的東西,但我們常常想把不同表的資料串起來看全貌。舉個例子:

  • students 表存學生名單。
  • courses 表存課程清單。
  • enrollments 表記錄誰上了哪些課。

要知道哪個學生上了哪門課,就得把這些表合起來查。面試時,會用 JOIN 的工程師看起來就很專業,畢竟這是資料工作裡最熱門的技能之一。

主要的合併類型

在 PostgreSQL 裡有幾種 JOIN,每種都有自己的用途。先來個總覽,別急著被複雜例子嚇到:

JOIN 類型 說明
INNER JOIN 只回傳兩個表都有對應資料的列。
LEFT JOIN 回傳左邊表的所有資料,右邊表只有對得上的才會出現。
RIGHT JOIN 回傳右邊表的所有資料,左邊表只有對得上的才會出現。
FULL OUTER JOIN 兩個表的所有資料都會出現,沒對上的地方會用 NULL 補。

選哪種 JOIN 要看你要解什麼問題:

  • 只要兩個表都有的資料,用 INNER JOIN
  • 想保留一個表的全部資料,另一個表只要有對應的,用 LEFT JOINRIGHT JOIN
  • 兩個表的所有資料都要,不管有沒有對上,用 FULL OUTER JOIN

我們直接來實戰看看這些合併怎麼用吧。

範例題目 —「誰上了哪門課?」

假設我們有三個表:

students

id name
1 Otto
2 Anna
3 Peter

courses

id title
101 數學
102 英文

enrollments

student_id course_id
1 101
2 102

這些表的關聯如下:

  • studentsid 欄位是學生的唯一識別碼。
  • coursesid 欄位是課程的唯一識別碼。
  • enrollments 表裡的 student_idcourse_id 連結學生和課程。

假設我們要解這個問題:哪個學生選了哪門課?

這就可以用 JOIN 來查。我們會根據關聯把表連起來:

  • studentsenrollmentsid = student_id 連。
  • enrollmentscoursescourse_id = id 連。

SQL 查詢長這樣:

SELECT students.name, courses.title
FROM enrollments
JOIN students ON enrollments.student_id = students.id
JOIN courses ON enrollments.course_id = courses.id;

這個查詢在做什麼:

  • FROM enrollments — 先從連結學生和課程的表開始。
  • JOIN students ON enrollments.student_id = students.id — 加進學生表,拿到名字。
  • JOIN courses ON enrollments.course_id = courses.id — 加進課程表,拿到課名。

查詢結果會像這樣:

name title
Otto 數學
Anna 英文

注意:如果有學生沒選任何課,他就不會出現在結果裡——因為 JOIN 預設是嚴格的(INNER JOIN)。之後我們會講怎麼用 LEFT JOIN 把這些學生也查出來。

如果這個查詢你還有點看不懂,別擔心!慢慢來,接下來的課都會帶你搞懂!

這在現實生活有什麼用?

現在你知道怎麼連資料表了,來聊聊現實世界。你有沒有想過網路商店怎麼運作?比如你挑手機時會看到其他用戶的評論。

  1. products 表存商品資訊。
  2. reviews 表存顧客評論。
  3. customers 表存顧客本身的資料。

要在網站上顯示評論,就要把 productsreviewscustomers 這幾個表合起來。這就是 JOIN 的實際應用啦。

要注意什麼?

在我們下堂課繼續深入 JOIN 之前,這裡有幾個重點要記住:

  1. JOIN 的順序很重要。 例如 LEFT JOIN 會回傳左邊表的資料,所以順序換了結果也會變。
  2. 先從小表開始練習。 一開始不要查幾百萬筆資料。記住,查詢要簡單易懂最重要。
  3. 習慣思考資料之間的關聯。 當你能把表當成一個大結構的部分時,JOIN 就會變得很自然。

從今天開始,我們要變身 SQL 專家啦。下堂課你會學到怎麼用 INNER JOIN 從兩個表抓資料。這會是你學 PostgreSQL 的一大步!

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION