2fish 的部落格

歡迎來到我的部落格!這裡是我記錄開發點滴的地方,希望你會喜歡😌

0%

六角學院 2024 後端工程師資料庫體驗營 - 小節作業:家具店的菜雞銷售奇遇記

在這篇文章中,我們將探索六角學院 2024 後端工程師資料庫體驗營的精彩瞬間!跟隨小美的第一天工作,看看她如何在系統當機的危機中,運用 SQL 技能解決客戶需求。最後,我們還會提供實作內容的大綱,幫助你輕鬆掌握 SQL 查詢的基礎與進階技巧。準備好一起來學習了嗎?

🛠️ 環境準備

練習資料庫

我們將使用 pg-sql 作為線上練習環境。

資料表建立

首先,讓我們建立一個模擬家具店的商品資料表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
CREATE TABLE products (
name VARCHAR(100), -- 商品名稱
price INTEGER, -- 原價
discount_price INTEGER, -- 優惠價
stock INTEGER, -- 庫存數量
category VARCHAR(50), -- 商品分類
status VARCHAR(20) -- 商品狀態
);

INSERT INTO products (name, price, discount_price, stock, category, status) VALUES
('北歐風雙人沙發', 39900, 35900, 3, '沙發', 'active'),
('貓抓皮L型沙發', 58900, 52900, 1, '沙發', 'active'),
('典雅三人座沙發', 42800, 42800, 5, '沙發', 'active'),
('工業風電視櫃', 5900, 4900, 12, '櫃子', 'active'),
('簡約書櫃', 3500, 3500, 8, '櫃子', 'active'),
('玄關鞋櫃', 2900, 2900, 15, '櫃子', 'active'),
('日式雙人床架', 12000, 11200, 6, '床架', 'active'),
('掀床五尺雙人床', 19900, 18900, 2, '床架', 'active'),
('兒童床架', 8900, 8900, 0, '床架', 'inactive'),
('電腦辦公椅', 4500, 3900, 20, '椅子', 'active'),
('餐椅四入組', 6000, 5200, 8, '椅子', 'active'),
('北歐風餐桌', 15800, 14800, 4, '桌子', 'active'),
('實木咖啡桌', 3200, 2900, 10, '桌子', 'active'),
('電競書桌', 8900, 8900, 0, '桌子', 'inactive');

📝 完整資料表參考

商品名稱 原價 優惠價 庫存 類別 狀態
北歐風雙人沙發 39900 35900 3 沙發 active
貓抓皮L型沙發 58900 52900 1 沙發 active
典雅三人座沙發 42800 42800 5 沙發 active
工業風電視櫃 5900 4900 12 櫃子 active
簡約書櫃 3500 3500 8 櫃子 active
玄關鞋櫃 2900 2900 15 櫃子 active
日式雙人床架 12000 11200 6 床架 active
掀床五尺雙人床 19900 18900 2 床架 active
兒童床架 8900 8900 0 床架 inactive
電腦辦公椅 4500 3900 20 椅子 active
餐椅四入組 6000 5200 8 椅子 active
北歐風餐桌 15800 14800 4 桌子 active
實木咖啡桌 3200 2900 10 桌子 active
電競書桌 8900 8900 0 桌子 inactive

🎬 故事背景

築夢家居的危機時刻

剛入職築夢家居的銷售顧問小美,萬萬沒想到第一天上班就遇上了巨大挑戰。系統突然大當機,而這間老字號家具店僅存的查詢工具只剩下 POS 機和資料庫。更要命的是,今天剛好是週年慶開跑的大日子,主管還在門市坐鎮!

在一籌莫展之際,小美只好向店裡的工程師小明求救…


💡 第一課:基礎查詢

初次接觸 SQL

👨🏻‍🦳 客人:「我要看那個貓抓皮沙發,你們還有貨嗎?」

👩🏻 小美:(慌張)啊…貓抓皮沙發…

(急忙用 LINE 詢問小明)

👩🏻 小美:學長救命!要怎麼查這個沙發?

👨🏼‍💻 小明:用等於就可以了:

1
2
3
SELECT name, price, stock
FROM products
WHERE name = '貓抓皮L型沙發';

👩🏻 小美:喔!就是
- 選取 名字、價格、庫存
- 從 商品表
- 找 商品名等於貓抓皮L型沙發
對嗎?

👨🏼‍💻 小明:對!很快就上手了嘛!

👩🏻 小美:(快速輸入)哇!真的查到了!只剩一張庫存耶…

👨🏻‍🦳 客人:(不耐煩)小姐?到底有沒有啊?

👩🏻 小美:這款 L 型沙發目前最後一張特價 52900,要幫您預訂嗎?

👨🏻‍🦳 客人:哦?最後一張喔…那…就先訂起來好了!

👨🏼‍💻 小明:!!!這麼快就會了?根本是資料庫天才 == b


📚 基礎查詢實戰

情境 1:單品查詢

客人詢問:「這張北歐風雙人沙發多少錢?」

1
2
3
SELECT price, stock, name     -- 選取 價格、庫存、名稱
FROM products -- 從 商品表
WHERE name = '北歐風雙人沙發'; -- 找 商品名稱等於北歐風雙人沙發

💡 查詢重點:使用 WHERE 子句指定條件,篩選出符合條件的資料

情境 2:價格比較

客人詢問:「請列出 5000 元以下的櫃子有哪些?」

1
2
3
4
SELECT *                     -- 選取所有欄位
FROM products -- 從 商品表
WHERE category = '櫃子' -- 找 商品類別等於櫃子
AND price < 5000; -- 且 價格小於 5000

💡 查詢重點:使用 AND 組合多個條件,所有條件都必須符合才會回傳結果

情境 3:庫存確認

客人詢問:「日式雙人床架還有貨嗎?」

1
2
3
SELECT *                     -- 選取所有欄位
FROM products -- 從 商品表
WHERE name = '日式雙人床架'; -- 找 商品名稱等於日式雙人床架

🔄 進階查詢:邏輯運算 AND

情境 4:預算內的商品

客人詢問:「想找 4 萬以下,而且有現貨的沙發」

1
2
3
4
5
SELECT *
FROM products
WHERE category = '沙發' -- 找 分類是沙發
AND price < 40000 -- 價格小於 4 萬
AND stock > 0; -- 有庫存

💡 查詢重點:使用 AND 組合多個條件,所有條件都必須符合才會回傳結果

情境 5:特價且有貨

客人詢問:「沙發有哪些特價且現貨的品項?」

1
2
3
4
5
SELECT *
FROM products
WHERE category = '沙發' -- 找 分類是沙發
AND price > discount_price -- 有特價(原價大於優惠價)
AND stock > 0; -- 有庫存

🔀 進階查詢:邏輯運算 OR

情境 6:多分類查詢

客人詢問:「我要找櫃子或桌子」

1
2
3
4
SELECT *
FROM products
WHERE category = '櫃子' -- 找 分類是櫃子
OR category = '桌子'; -- 或 分類是桌子

💡 查詢重點:使用 OR 時,符合任一條件就會被包含在結果中

情境 7:指定商品

客人詢問:「北歐風雙人沙發和貓抓皮L型沙發哪個還有貨?」

1
2
3
4
SELECT name, price, discount_price, stock  -- 選取 名字、價格、優惠價、庫存
FROM products -- 從 商品表
WHERE name = '北歐風雙人沙發' -- 找 商品名稱等於北歐風雙人沙發
OR name = '貓抓皮L型沙發'; -- 或 商品名稱等於貓抓皮L型沙發

🎯 進階查詢:IN 運算

情境 8:多分類查詢

客人詢問:「客廳的家具有哪些?我要看沙發、櫃子跟桌子」

1
2
3
SELECT *                                    
FROM products
WHERE category IN ('沙發', '櫃子', '桌子'); -- 找 分類是 沙發、櫃子、桌子

💡 查詢重點:使用 IN 運算子,指定多個可能的值,只要符合其中一個值就會被包含在結果中

情境 9:特定商品

客人詢問:「電腦辦公椅和餐椅四入組的價格是多少?」

1
2
3
SELECT name, price, discount_price, stock     -- 選取 名字、價格、優惠價、庫存
FROM products -- 從 商品表
WHERE name IN ('電腦辦公椅', '餐椅四入組'); -- 找 商品名稱是 電腦辦公椅、餐椅四入組

📊 進階查詢:BETWEEN

情境 10:價格區間

客人詢問:「想找 10000 到 20000 之間的商品有哪些?」

1
2
3
SELECT *
FROM products
WHERE price BETWEEN 10000 AND 20000; -- 找 價格在 10000 到 20000 之間

💡 查詢重點:使用 BETWEEN 運算子,指定價格範圍,範圍內的資料都會被包含在結果中

情境 11:庫存區間

主管要求:「請列出庫存在 5 到 15 之間的商品」

1
2
3
SELECT *
FROM products
WHERE stock BETWEEN 5 AND 15; -- 找 庫存在 5 到 15 之間

❌ 進階查詢:NOT IN

情境 12:排除商品

主管要求:「列出除了沙發和床架以外的商品」

1
2
3
SELECT *
FROM products
WHERE category NOT IN ('沙發', '床架'); -- 找 分類不是 沙發、床架

💡 查詢重點:使用 NOT IN 運算子,排除特定值,只會回傳符合條件的資料


🔄 資料維護:更新和刪除

情境 13:調整價格

主管指示:「北歐風雙人沙發要調降 2000 元」

1
2
3
UPDATE products                              -- 更新 products 表
SET price = price - 2000 -- 調降 2000 元
WHERE name = '北歐風雙人沙發'; -- 指定要降價的商品名稱

💡 查詢重點:使用 UPDATE 語句,指定要更新的欄位和條件,只會更新符合條件的資料

情境 14:更新庫存

主管通知:「電腦辦公椅進了 5 張」

1
2
3
UPDATE products                              -- 更新 products 表
SET stock = stock + 5 -- 進了 5 張庫存
WHERE name = '電腦辦公椅'; -- 指定要增加庫存的商品名稱

情境 15:清除資料

主管指示:「要清掉兒童床架和電競書桌的資料」

1
2
DELETE FROM products                              -- 從 products 表刪除資料
WHERE name IN ('兒童床架', '電競書桌'); -- 指定商品名稱

💡 查詢重點:使用 DELETE 語句,指定要刪除的條件,只會刪除符合條件的資料


🎯 學習重點總結

  1. 基礎查詢語法

    • SELECT:選擇要顯示的欄位
    • FROM:指定查詢的資料表
    • WHERE:設定查詢條件
  2. 條件組合

    • AND:多個條件同時成立
    • OR:任一條件成立
    • IN:符合列表中的任一值
    • BETWEEN:範圍查詢
    • NOT IN:排除特定值
  3. 資料維護操作

    • UPDATE:更新資料
    • DELETE:刪除資料

💪 練習建議

  1. 先從簡單的單一條件查詢開始
  2. 逐步嘗試組合多個條件
  3. 實際動手操作每個範例
  4. 嘗試修改條件創造新的查詢場景
  5. 記得在執行 UPDATE 和 DELETE 前先確認條件是否正確

🔗 相關資源


希望透過小美的第一天工作經歷,能幫助你更生動地理解 SQL 查詢的基礎概念。