當單一表格不夠用時:為什麼我們需要關聯 (JOIN)?

在前面的章節中,我們學會了如何從單一一個表格 (例如 users 表) 中把資料撈出來。這就像是你在 Excel 裡面打開一個工作表,然後用篩選器找資料一樣簡單。

但在真實的商業世界中,資料是極度錯綜複雜的。 想像一個大型的電商網站(如 PChome 或蝦皮),它的資料絕對不可能全部塞在同一個表格裡。為什麼? 如果把「會員姓名、信箱、商品名稱、商品價格、購買數量、送貨地址」全部寫在同一張表裡,當同一個會員買了 100 次東西,他的姓名跟信箱就會被重複登記 100 次。這不只浪費硬碟空間,萬一會員改名字了,你要一口氣去修改 100 筆資料,非常容易出錯!

因此,關聯式資料庫 (Relational Database) 發明了最偉大的設計:將資料拆分到不同的表格中,再用「鑰匙 (Key)」把它們串起來。

  • 會員表 (users):專門存會員的基本資料。每個會員有一個唯一的編號 (id)。
  • 商品表 (products):專門存商品的目錄。每個商品有一個唯一的編號 (id)。
  • 訂單表 (orders):這是核心!訂單表裡「不存」會員名字,也「不存」商品名字。它只存 user_idproduct_id

當你需要產出一張「誰買了什麼東西」的完整報表時,你必須告訴資料庫,請它把這三張表「拼起來」。這個動作,在 SQL 裡就叫做 JOIN


四種常見的 JOIN 模式 (不用硬背,AI 會幫你)

雖然在 Vibe Coding 時代我們不需要死背語法,但了解 JOIN 的概念,可以幫助你更精準地下達 Prompt 給 AI。

  1. INNER JOIN (交集):最常用。只有當兩張表都有資料時才抓出來。「找出有買過東西的會員」。
  2. LEFT JOIN (左外連線):以左邊的表為主。不管右邊有沒有對應的資料,左邊的資料全部顯示。「列出所有會員,如果他有買東西就顯示訂單,沒買東西訂單欄位就留空」。
  3. RIGHT JOIN (右外連線):與 LEFT JOIN 相反,以右邊為主。
  4. FULL OUTER JOIN (聯集):兩邊的資料全部抓出來,沒有對應到的就填空值 (NULL)。

Vibe Prompt:讓 AI 幫你寫出神級 JOIN 語法

你只需要用白話文描述你的表格關係,AI 就會瞬間幫你把 JOIN 語法寫好。

【高階關聯報表 Prompt】 我有三張表:

  1. users (id, name, email)
  2. products (id, title, price)
  3. 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】 請根據剛剛的 ordersproducts 結構,幫我寫一段 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 執行這段程式碼時,你就會得到一張極度乾淨的報表:

  1. 人體工學 AI 座椅 | 賣出 5 個 | 總營收 60000
  2. Vibe 頂級機械鍵盤 | 賣出 12 個 | 總營收 42000

透過 Vibe Coding 搭配 SQL 的強大威力,你再也不需要害怕被幾十萬筆資料淹沒。你只需要會問問題,AI 就會幫你把答案算得清清楚楚!在下一章,我們將挑戰更困難的任務:如何利用資料庫保護你的使用者密碼!

解鎖完整教學內容

本章為付費內容。加入專案即可解鎖超過 5000 字的深度解析,包含 10 個以上神級 Prompt 與真實 Source Code 範例!