# 11/22 每日任務
## 需要必備的知識點
您可以選擇以下任一教材來吸收:
1. [觀看第一堂直播錄影](https://courses.hexschool.com/courses/20242/lectures/58538606)
2. 或者觀看預習影音章節
* [資料庫簡介](https://courses.hexschool.com/courses/20242/lectures/57988692)
* [建立 SQL 資料表](https://courses.hexschool.com/courses/20242/lectures/57988695)
* [SQL 語法教學](https://courses.hexschool.com/courses/20242/lectures/57988706)
## 題目 - 「晴天咖啡廳」新人小杰教育訓練奇遇記
### **資料庫結構**
請先將此資料倒入 [pg-sql](https://pg-sql.com/),再行解題
```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');
```
### **劇情旁白**
剛到「晴天咖啡廳」當實習生的小杰,今天要開始學習使用店裡的資料庫系統
這間溫馨的咖啡廳不只供應各式飲品和甜點,還販售咖啡豆和器材。店長希望每個員工都要成為「全端工程師」...?
等等,不是當個專業的服務生嗎?為什麼還需要會全端工程師技能啊!
資深店員小雨就是資管系畢業的,便開始教導小杰...
### **劇情對話**
(咖啡廳內)
**顧客**:請問你們的特調拿鐵現在有優惠嗎?
**小杰**:呃...這個...(慌張地翻找資料庫資料)
**小雨**:(走過來)讓我教你怎麼查:
```sql
SELECT name, price, discount_price
FROM products
WHERE name = '特調拿鐵';
```
**小杰**:喔!我知道了!
這就是:
**選取** 名稱、原價、優惠價
**從** 商品表
**找** 名稱是特調拿鐵
對嗎?
但前輩... 我是來應徵服務員的欸,為什麼我必須學 SQL 語法啊...
**小雨**:誰叫老闆沒錢訂閱 POS 系統?
你就認命一點吧,老闆說他快把系統做好了,這段時間你就直接去資料庫撈你自己想要的資料吧~
**小杰**:我應該是先提辭職才對吧!
**小雨**:客人準備變多了,別廢話,趕快來特訓吧 :D
## 練習題目
**基礎查詢篇情境 1**:缺貨確認
顧客:「草莓乳酪蛋糕還有嗎?」
小杰想查:要確認草莓乳酪蛋糕的庫存
**情境 2**:優惠查詢
顧客:「有什麼特價的咖啡嗎?」
小杰想查:列出所有有特價(優惠價低於原價)的咖啡類商品
**情境 3**:價格區間
顧客:「有沒有100元以下的飲品?」
小杰想查:找出所有100元以下的飲品
**AND條件篇情境 4**:庫存與價格
顧客:「有沒有特價,而且還有貨的甜點?」
小杰想查:要同時符合有特價(優惠價<原價)且還有庫存的甜點
**情境 5**:價格與分類
店長:「幫我查一下所有200元以上,而且還有庫存的咖啡類商品」
小杰想查:列出符合價格和分類條件的商品
**OR條件篇情境 6**:多分類查詢
顧客:「我想看看你們的咖啡豆和濾掛包」
小杰想查:列出咖啡豆類和濾掛式咖啡的商品
**BETWEEN篇情境 7**:價格區間
顧客:「想找100到200元之間的飲品」
小杰想查:列出這個價格區間的飲品
**更新資料篇情境 8**:調整價格
店長:「美式咖啡要降價10元」
小杰想查:如何更新美式咖啡的優惠價
**情境 9**:更新庫存
店長:「特選咖啡豆進了10包」
小杰想查:如何增加特選咖啡豆的庫存
:::spoiler 解答
```sql
-- 基礎查詢篇
-- 情境 1:缺貨確認
SELECT name, stock
FROM products
WHERE name = '草莓乳酪蛋糕';
-- 情境 2:優惠查詢
SELECT name, price, discount_price
FROM products
WHERE category = '咖啡'
AND price > discount_price
AND status = 'active';
-- 情境 3:價格區間
SELECT name, discount_price
FROM products
WHERE discount_price < 100
AND (category = '咖啡' OR category = '茶飲' OR category = '果汁')
AND status = 'active';
-- AND條件篇
-- 情境 4:庫存與價格
SELECT name, price, discount_price, stock
FROM products
WHERE category = '甜點'
AND price > discount_price
AND stock > 0
AND status = 'active';
-- 情境 5:價格與分類
SELECT name, discount_price, stock
FROM products
WHERE category = '咖啡'
AND discount_price >= 200
AND stock > 0
AND status = 'active';
-- OR條件篇
-- 情境 6:多分類查詢
SELECT name, price, discount_price
FROM products
WHERE category = '咖啡豆'
OR name = '濾掛式咖啡包'
AND status = 'active';
-- BETWEEN篇
-- 情境 7:價格區間
SELECT name, discount_price
FROM products
WHERE discount_price BETWEEN 100 AND 200
AND (category = '咖啡' OR category = '茶飲' OR category = '果汁')
AND status = 'active';
-- 更新資料篇
-- 情境 8:調整價格
UPDATE products
SET discount_price = discount_price - 10
WHERE name = '美式咖啡';
-- 情境 9:更新庫存
UPDATE products
SET stock = stock + 10
WHERE name = '特選咖啡豆';
```
:::