今天我們要來聊聊關聯式資料庫裡最有趣的主題之一——怎麼用 JOIN 把多個資料表的資料合在一起。這個功能超強大,能讓你建立複雜的關聯跟做分析。
想像一下,你的資料庫就像一本超大的漫畫,每個分開的資料表就是一個分鏡。要拼湊出完整的故事,你就得把這些分鏡連起來。這時 JOIN 就派上用場啦。資料合併就是讓查詢可以從多個資料表抓資料,然後根據你設定的條件把它們串起來。
關聯式資料庫的核心就是資料表之間的關聯概念。每個資料表都存一種特定的東西,但我們常常想把不同表的資料串起來看全貌。舉個例子:
students表存學生名單。courses表存課程清單。enrollments表記錄誰上了哪些課。
要知道哪個學生上了哪門課,就得把這些表合起來查。面試時,會用 JOIN 的工程師看起來就很專業,畢竟這是資料工作裡最熱門的技能之一。
主要的合併類型
在 PostgreSQL 裡有幾種 JOIN,每種都有自己的用途。先來個總覽,別急著被複雜例子嚇到:
| JOIN 類型 | 說明 |
|---|---|
INNER JOIN |
只回傳兩個表都有對應資料的列。 |
LEFT JOIN |
回傳左邊表的所有資料,右邊表只有對得上的才會出現。 |
RIGHT JOIN |
回傳右邊表的所有資料,左邊表只有對得上的才會出現。 |
FULL OUTER JOIN |
兩個表的所有資料都會出現,沒對上的地方會用 NULL 補。 |
選哪種 JOIN 要看你要解什麼問題:
- 只要兩個表都有的資料,用
INNER JOIN。 - 想保留一個表的全部資料,另一個表只要有對應的,用
LEFT JOIN或RIGHT 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 |
這些表的關聯如下:
students的id欄位是學生的唯一識別碼。courses的id欄位是課程的唯一識別碼。enrollments表裡的student_id跟course_id連結學生和課程。
假設我們要解這個問題:哪個學生選了哪門課?
這就可以用 JOIN 來查。我們會根據關聯把表連起來:
students跟enrollments用id = student_id連。enrollments跟courses用course_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 把這些學生也查出來。
如果這個查詢你還有點看不懂,別擔心!慢慢來,接下來的課都會帶你搞懂!
這在現實生活有什麼用?
現在你知道怎麼連資料表了,來聊聊現實世界。你有沒有想過網路商店怎麼運作?比如你挑手機時會看到其他用戶的評論。
products表存商品資訊。reviews表存顧客評論。customers表存顧客本身的資料。
要在網站上顯示評論,就要把 products、reviews 跟 customers 這幾個表合起來。這就是 JOIN 的實際應用啦。
要注意什麼?
在我們下堂課繼續深入 JOIN 之前,這裡有幾個重點要記住:
JOIN的順序很重要。 例如LEFT JOIN會回傳左邊表的資料,所以順序換了結果也會變。- 先從小表開始練習。 一開始不要查幾百萬筆資料。記住,查詢要簡單易懂最重要。
- 習慣思考資料之間的關聯。 當你能把表當成一個大結構的部分時,
JOIN就會變得很自然。
從今天開始,我們要變身 SQL 專家啦。下堂課你會學到怎麼用 INNER JOIN 從兩個表抓資料。這會是你學 PostgreSQL 的一大步!
GO TO FULL VERSION