當單一表格不夠用時:為什麼我們需要關聯 (JOIN)?
在前面的章節中,我們學會了如何從單一一個表格 (例如 users 表) 中把資料撈出來。這就像是你在 Excel 裡面打開一個工作表,然後用篩選器找資料一樣簡單。
但在真實的商業世界中,資料是極度錯綜複雜的。 想像一個大型的電商網站(如 PChome 或蝦皮),它的資料絕對不可能全部塞在同一個表格裡。為什麼? 如果把「會員姓名、信箱、商品名稱、商品價格、購買數量、送貨地址」全部寫在同一張表裡,當同一個會員買了 100 次東西,他的姓名跟信箱就會被重複登記 100 次。這不只浪費硬碟空間,萬一會員改名字了,你要一口氣去修改 100 筆資料,非常容易出錯!
因此,關聯式資料庫 (Relational Database) 發明了最偉大的設計:將資料拆分到不同的表格中,再用「鑰匙 (Key)」把它們串起來。
- 會員表 (users):專門存會員的基本資料。每個會員有一個唯一的編號 (id)。
- 商品表 (products):專門存商品的目錄。每個商品有一個唯一的編號 (id)。
- 訂單表 (orders):這是核心!訂單表裡「不存」會員名字,也「不存」商品名字。它只存
user_id跟product_id。
當你需要產出一張「誰買了什麼東西」的完整報表時,你必須告訴資料庫,請它把這三張表「拼起來」。這個動作,在 SQL 裡就叫做 JOIN。
四種常見的 JOIN 模式 (不用硬背,AI 會幫你)
雖然在 Vibe Coding 時代我們不需要死背語法,但了解 JOIN 的概念,可以幫助你更精準地下達 Prompt 給 AI。
- INNER JOIN (交集):最常用。只有當兩張表都有資料時才抓出來。「找出有買過東西的會員」。
- LEFT JOIN (左外連線):以左邊的表為主。不管右邊有沒有對應的資料,左邊的資料全部顯示。「列出所有會員,如果他有買東西就顯示訂單,沒買東西訂單欄位就留空」。
- RIGHT JOIN (右外連線):與 LEFT JOIN 相反,以右邊為主。
- FULL OUTER JOIN (聯集):兩邊的資料全部抓出來,沒有對應到的就填空值 (NULL)。
Vibe Prompt:讓 AI 幫你寫出神級 JOIN 語法
你只需要用白話文描述你的表格關係,AI 就會瞬間幫你把 JOIN 語法寫好。
【高階關聯報表 Prompt】 我有三張表:
users(id, name, email)products(id, title, price)orders(id, user_id, product_id, quantity, created_at)請幫我寫一段 SQL 語法,列出「所有的訂單明細」。 報表上必須顯示:訂單編號、購買的會員姓名 (name)、購買的商品名稱 (title)、購買數量 (quantity),以及這筆訂單的總金額 (請用 price * quantity 計算得出,並命名為 total_amount)。 最後,請依照時間由新到舊排序。
AI 產出的完美 SQL:
SELECT
o.id AS order_id,
u.name AS user_name,
p.title AS product_name,
o.quantity,
(p.price * o.quantity) AS total_amount,
o.created_at
FROM
orders o
INNER JOIN
users u ON o.user_id = u.id
INNER JOIN
products p ON o.product_id = p.id
ORDER BY
o.created_at DESC;
(你看!AI 自動幫你用 INNER JOIN 把三張表串了起來,甚至還幫你寫了計算總金額的數學公式!)
群組運算 (GROUP BY) 與樞紐分析
除了把表拼起來之外,資料分析最常做的事情就是「統計與分組」。這就像是 Excel 裡面的「樞紐分析表 (Pivot Table)」。
例如,老闆今天走到你座位旁邊,丟下一句:「幫我算一下,上個月每個商品各賣了幾個?總營收各是多少?哪個商品最賺錢?」
如果你用 Excel 慢慢拉樞紐分析,可能會拉到眼花撩亂。但在 SQL 的世界裡,這叫做 GROUP BY (群組化) 加上 聚合函數 (Aggregate Functions, 例如 SUM, COUNT, AVG)。
Vibe Prompt:瞬間產出商業決策報表
【商品營收分析 Prompt】 請根據剛剛的
orders與products結構,幫我寫一段 SQL。 我想統計「每一個商品」的「總銷售數量」與「創造的總營收」。 請以總營收由大到小排序,讓我一眼看出最賺錢的商品是誰。
AI 產出的神級報表 SQL:
SELECT
p.title AS product_name,
SUM(o.quantity) AS total_sold_quantity,
SUM(p.price * o.quantity) AS total_revenue
FROM
products p
LEFT JOIN
orders o ON p.id = o.product_id
GROUP BY
p.id, p.title
ORDER BY
total_revenue DESC NULLS LAST;
當你在 Supabase 的 SQL Editor 執行這段程式碼時,你就會得到一張極度乾淨的報表:
- 人體工學 AI 座椅 | 賣出 5 個 | 總營收 60000
- Vibe 頂級機械鍵盤 | 賣出 12 個 | 總營收 42000
透過 Vibe Coding 搭配 SQL 的強大威力,你再也不需要害怕被幾十萬筆資料淹沒。你只需要會問問題,AI 就會幫你把答案算得清清楚楚!在下一章,我們將挑戰更困難的任務:如何利用資料庫保護你的使用者密碼!