分類
網頁製作/軟體開發知識

2024 後端工程師 – 資料庫體驗營 | 11/22 每日任務 | 題目 – 「晴天咖啡廳」新人小杰教育訓練奇遇記

資料庫結構

請先將此資料倒入 pg-sql,再行解題

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
    ('精品手沖咖啡', 180, 160, 50, '咖啡', 'active'),
    ('美式咖啡', 120, 120, 100, '咖啡', 'active'),
    ('摩卡咖啡', 150, 150, 80, '咖啡', 'active'),
    ('特調拿鐵', 160, 140, 60, '咖啡', 'active'),
    ('伯爵紅茶', 100, 100, 70, '茶飲', 'active'),
    ('玫瑰花茶', 120, 120, 30, '茶飲', 'active'),
    ('柳橙汁', 90, 80, 40, '果汁', 'active'),
    ('水果茶', 130, 110, 45, '茶飲', 'active'),
    ('提拉米蘇', 160, 160, 15, '甜點', 'active'),
    ('草莓乳酪蛋糕', 180, 150, 8, '甜點', 'active'),
    ('巧克力布朗尼', 150, 150, 0, '甜點', 'inactive'),
    ('特選咖啡豆', 500, 450, 20, '咖啡豆', 'active'),
    ('摩卡咖啡豆', 480, 480, 15, '咖啡豆', 'active'),
    ('濾掛式咖啡包', 25, 20, 200, '咖啡', 'active'),
    ('手沖濾紙', 180, 180, 30, '器材', 'active');

劇情旁白

剛到「晴天咖啡廳」當實習生的小杰,今天要開始學習使用店裡的資料庫系統

這間溫馨的咖啡廳不只供應各式飲品和甜點,還販售咖啡豆和器材。店長希望每個員工都要成為「全端工程師」…?

等等,不是當個專業的服務生嗎?為什麼還需要會全端工程師技能啊!

資深店員小雨就是資管系畢業的,便開始教導小杰…

劇情對話

(咖啡廳內)
顧客:請問你們的特調拿鐵現在有優惠嗎?
小杰:呃…這個…(慌張地翻找資料庫資料)
小雨:(走過來)讓我教你怎麼查:

SELECT name, price, discount_price
FROM products
WHERE name = '特調拿鐵';

小杰:喔!我知道了!
這就是:
選取 名稱、原價、優惠價
商品表
名稱是特調拿鐵
對嗎?

但前輩… 我是來應徵服務員的欸,為什麼我必須學 SQL 語法啊…

小雨:誰叫老闆沒錢訂閱 POS 系統?
你就認命一點吧,老闆說他快把系統做好了,這段時間你就直接去資料庫撈你自己想要的資料吧~

小杰:我應該是先提辭職才對吧!

小雨:客人準備變多了,別廢話,趕快來特訓吧 😀

練習題目

基礎查詢篇

情境 1:缺貨確認

顧客:「草莓乳酪蛋糕還有嗎?」
小杰想查:要確認草莓乳酪蛋糕的庫存

SELECT name AS 商品名稱, -- 顯示商品名稱
       stock AS 庫存數量 -- 顯示庫存數量
FROM products 
WHERE name = '草莓乳酪蛋糕'; -- 限定商品名稱為「草莓乳酪蛋糕」

情境 2:優惠查詢

顧客:「有什麼特價的咖啡嗎?」
小杰想查:列出所有有特價(優惠價低於原價)的咖啡類商品

SELECT name AS 商品名稱, -- 顯示商品名稱
       price AS 原價, -- 顯示原價
       discount_price AS 優惠價 -- 顯示優惠價
FROM products 
WHERE category = '咖啡' -- 篩選商品分類為「咖啡」
  AND discount_price < price; -- 限定優惠價低於原價(有特價)

情境 3:價格區間

顧客:「有沒有100元以下的飲品?」
小杰想查:找出所有100元以下的飲品

SELECT name AS 商品名稱, -- 顯示商品名稱
       price AS 原價, -- 顯示原價
       discount_price AS 優惠價 -- 顯示優惠價
FROM products 
WHERE category IN ('咖啡', '茶飲', '果汁') -- 篩選分類為咖啡、茶飲或果汁
  AND discount_price < 100; -- 限定優惠價低於 100 元

AND 條件篇

情境 4:庫存與價格

顧客:「有沒有特價,而且還有貨的甜點?」
小杰想查:要同時符合有特價(優惠價<原價)且還有庫存的甜點

SELECT name AS 商品名稱, -- 顯示商品名稱
       price AS 原價, -- 顯示原價
       discount_price AS 優惠價, -- 顯示優惠價
       stock AS 庫存數量 -- 顯示庫存數量
FROM products 
WHERE category = '甜點' -- 限定商品分類為甜點
  AND discount_price < price -- 優惠價低於原價(有特價)
  AND stock > 0; -- 庫存數量必須大於 0(還有貨)

情境 5:價格與分類

店長:「幫我查一下所有200元以上,而且還有庫存的咖啡類商品」
小杰想查:列出符合價格和分類條件的商品

SELECT name AS 商品名稱, -- 顯示商品名稱
       price AS 原價, -- 顯示原價
       discount_price AS 優惠價, -- 顯示優惠價
       stock AS 庫存數量 -- 顯示庫存數量
FROM products 
WHERE category = '咖啡' -- 限定商品分類為咖啡
  AND discount_price > 200 -- 優惠價高於 200 元
  AND stock > 0; -- 庫存數量必須大於 0(還有貨)

註:所有咖啡類商品的價格都不到 200 元以上,所以這段查詢沒有結果。

OR 條件篇

情境 6:多分類查詢

顧客:「我想看看你們的咖啡豆和濾掛包」
小杰想查:列出咖啡豆類和濾掛式咖啡的商品

SELECT name AS 商品名稱, -- 顯示商品名稱
       price AS 原價, -- 顯示原價
       discount_price AS 優惠價, -- 顯示優惠價
       stock AS 庫存數量 -- 顯示庫存數量
FROM products 
WHERE category = '咖啡豆' -- 篩選分類為咖啡豆
   OR name = '濾掛式咖啡包'; -- 或商品名稱為「濾掛式咖啡包」

BETWEEN 篇

情境 7:價格區間

顧客:「想找100到200元之間的飲品」
小杰想查:列出這個價格區間的飲品

SELECT name AS 商品名稱, -- 顯示商品名稱
       price AS 原價, -- 顯示原價
       discount_price AS 優惠價 -- 顯示優惠價
FROM products 
WHERE category IN ('咖啡', '茶飲', '果汁') -- 篩選分類為咖啡、茶飲或果汁
  AND discount_price BETWEEN 100 AND 200; -- 優惠價介於 100 到 200 元之間

更新資料篇

情境 8:調整價格

店長:「美式咖啡要降價10元」
小杰想查:如何更新美式咖啡的優惠價

UPDATE products 
SET discount_price = discount_price - 10 -- 將優惠價減少 10 元
WHERE name = '美式咖啡'; -- 限定更新的商品為「美式咖啡」

情境 9:更新庫存

店長:「特選咖啡豆進了10包」
小杰想查:如何增加特選咖啡豆的庫存

UPDATE products 
SET stock = stock + 10 -- 將庫存數量增加 10
WHERE name = '特選咖啡豆'; -- 限定更新的商品為「特選咖啡豆」

加碼情境:多條件查詢

情境 10:複合條件推薦

顧客:「我想找一杯 150 元以下,而且要有咖啡豆研磨的咖啡,請問有什麼推薦?」

SELECT name AS 商品名稱, -- 顯示商品名稱
       price AS 原價, -- 顯示原價
       discount_price AS 優惠價 -- 顯示優惠價
FROM products 
WHERE category = '咖啡豆' -- 篩選分類為咖啡豆
  AND discount_price < 150; -- 優惠價低於 150 元

註:沒有分類為咖啡豆的商品的優惠價格低於 150 元,所以這段查詢沒有結果。

自己出的題目:特價商品排序

顧客詢問:「我想看目前所有特價商品,請按照優惠價從低到高排列。」

需求描述: 列出所有優惠價低於原價的商品名稱、分類、原價與優惠價,並根據優惠價從低到高進行排序。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *