[Hexschool Backend experience camp] — 資料庫體驗營
Introduction & 前言
小節作業於摘要第五點,如果只想參照作業的部分可以快轉跳至 小節作業:家具店的菜雞銷售奇遇記
隔了好一段時間沒有自我進修,趁著最近六角學院在特價課程,去摸一下後端世界的樣子。
接下來會有幾篇紀錄上課的過程,以及中間的一些心得、作業筆記。
整篇文章是筆者自己的心得,如果文內有錯誤的地方,還請盡情指出。
課程總共會有四堂直播課,其中不包含學院已經上傳的課程影片,約莫 50 個小短片。
本篇會從零開始記錄筆記,可能會分成幾篇紀錄,這篇會是前 25% 的部分。
Summary & 摘要
如果需要觀看小節作業,可以跳過前四章
另外本篇文章還不會實際操作到真實 DB,可以先透過線上網站去練習:線上練習網站 PG SQL
- 資料庫簡介
- 建立 SQL 資料表
- 資料的 CRUD
- 資料庫註解
- 小節作業:家具店的菜雞銷售奇遇記
資料庫簡介
資料庫組成可大致分為
- Table(資料表) -> 整體資料,通常會是一個類型,如 users
- Columns(欄位) -> 定義資料的屬性跟類型 Data Type
- Rows(資料列) -> 是橫向單筆資料的集合,代表一整筆完整資料,例如 users 表,定義了 編號、用戶姓氏、名字、性別 等等四個欄位的 Data Type,那一整筆資料舉例就是 1, 王, 小明, 男
操作資料庫可使用 SQL(Structured Query Language) 語法,全名是『結構化查詢語言』,目前較多人使用為
- PostgreSQL
- MySQL
- MS SQL Server
- Oracle
建立 SQL 資料表
資料庫三劍客,透過下列方式,去定義出三劍客,就可以創建出資料表
1 | CREATE TABLE users ( |
Note:可透過 線上練習網站 PG SQL 嘗試建立
三劍客使用 Excel 舉例的話就是 Sheet 代表 Table,Column 跟 Row 的意思都一樣
資料的 CRUD
資料庫執行順序為下
- FROM 資料表名稱 -> 2. WHERE 篩選條件 -> 3. SELECT 欄位名稱
而資料庫類型 (Data Type) 常用有幾種
資料型態 | 描述 | 使用情境 | 範例 | 範例欄位 |
---|---|---|---|---|
INTEGER | 整數 | ID、年齡、數量 | 1, 20, 100 | age INTEGER |
VARCHAR(n) | 可辨長度字串 | 名稱、描述、普通文字欄位 | “Rex Hung” | name VARCHAR(50) |
TIMESTAMP | 日期時間 | 時間格式都適用 | ‘2024-11-20 09:00:00 | created_at TIMESTAMP |
DECIMAL(p,s) | 精確小數 | 金額、需要存放精確小數點的情況 | 3.141596, 2014.11 | price DECIMAL(10,2) |
BOOLEAN | 真/假值、布林 | 狀態、開關 | true, false | is_active BOOLEAN |
JSON | JSON 資料 | 彈性資料結構 | ‘{“name”: “Rex”}’ | settings JSON |
Note:更多可參考 w3school
INSERT 插入資料
字串需要單引號括起來
1 | INSERT INTO users(name, email, age) |
插入多筆資料
1 | INSERT INTO users(name, email, age) |
SELECT 查詢資料
- 普通查詢
1 | — 查詢所有欄位 |
- 別名查詢(AS)
1 | — Columns 轉換為自定義別名查詢 |
- 篩出想要的資料
篩選資料(WHERE)
1 | SELECT name,price |
比較運算值
運算子 | 意義 | 範例 |
---|---|---|
= | 等於 | WHERE price = 100 |
> | 大於 | WHERE price > 100 |
< | 小於 | WHERE price < 100 |
>= | 大於等於 | WHERE price >= 100 |
<= | 小於等於 | WHERE price <= 100 |
1 | SELECT * |
Note: 更多比較運算子可參考 Microsoft Ignite
邏輯運算子
運算子 | 意義 | 範例
AND | 且,兩個條件都要成立 | WHERE category = ‘3C’ AND price > 1000
OR | 或,其中一個條件成立 | WHERE category = ‘3C’ OR category = ‘配件’
1 | SELECT name, price, stock |
Note: 更多邏輯運算子可參考 Microsoft Ignite
邏輯運算子的延伸集合與範圍運算子
運算子 | 意義 | 範例 |
---|---|---|
BETWEEN | 在指定範圍內 | WHERE price BETWEEN 100 AND 500 |
IN | 包含在列出的值中 | WHERE category = ‘3C’ OR category = ‘配件’ |
1 | SELECT * FROM products |
UPDATE 更新欄位
UPDATE 資料表名稱 3
SET 欄位名稱 1
WHERE 篩選條件 2
1 | UPDATE products |
DELETE 刪除欄位
DELETE 資料表名稱 3
FROM 欄位名稱 1
WHERE 篩選條件 2
1 | DELETE FROM products |
資料庫註解
資料庫可以透過使用兩個 - 去進行註解,就如同我們在 HTML 上也會使用註解一樣
1 | — 這是一行註解,用來解釋以下這段 SQL 在做什麼 |
小節作業:家具店的菜雞銷售奇遇記
因為小節內有作業,作業會回覆到六角學院的 Discord,也能對下一個同學發問,這邊先貼上小節作業的回答
小節作業回答
情境 1:單品查詢
客人:「這張北歐風雙人沙發多少錢?」
小美想查:想找到這張沙發的價格和庫存
A: 39900
1 | SELECT |
情境 2:價格比較
客人:「請列出 5000 元以下的櫃子有哪些?」
小美想查:找出櫃子類且價格在 5000 以下的商品
A: 簡約書櫃, 玄關鞋櫃
1 | SELECT |
情境 3:庫存確認
客人:「日式雙人床架還有貨嗎?」
小美想查:確認日式雙人床架的庫存狀況
A: 剩下 6 個
1 | SELECT |
邏輯運算 AND:
情境 4:預算內的商品
客人:「想找 4 萬以下,而且有現貨的沙發」
小美想查:要同時符合:是沙發、4萬以下、有庫存
A: 北歐風雙人沙發、工業風電視櫃、簡約書櫃、玄關鞋櫃、日式雙人床架、掀床五尺雙人床、電腦辦公椅、餐椅四入組、北歐風餐桌、實木咖啡桌
1 | SELECT |
情境 5:特價且有貨
客人:「沙發有哪些特價且現貨的品項?」
小美想查:要找到沙發類且有特價(原價大於優惠價)且還有庫存的商品
A: 北歐風雙人沙發、貓抓皮L型沙發、工業風電視櫃、日式雙人床架、掀床五尺雙人床、電腦辦公椅、餐椅四入組、北歐風餐桌、實木咖啡桌
1 | SELECT |
邏輯運算 OR:
情境 6:多分類查詢
客人:「我要找櫃子或桌子」
小美想查:要找出櫃子類或桌子類的商品
A: 工業風電視櫃、簡約書櫃、玄關鞋櫃、北歐風餐桌、實木咖啡桌、電競書桌
1 | SELECT |
情境 7:指定商品
客人:「北歐風雙人沙發和貓抓皮L型沙發哪個還有貨?」
小美想查:要找出這兩張特定沙發的庫存狀況
A:前者剩 3 個,後者勝 1 個,都有貨
1 | SELECT |
IN 運算:
情境 8:多分類查詢
客人:「客廳的家具有哪些?我要看沙發、櫃子跟桌子」
小美想查:要找出沙發、櫃子和桌子這三種分類的商品
A: 北歐風雙人沙發、貓抓皮L型沙發、典雅三人座沙發、工業風電視櫃、簡約書櫃、玄關鞋櫃、北歐風餐桌、實木咖啡桌、電競書桌
1 | SELECT |
情境 9:特定商品
客人:「電腦辦公椅和餐椅四入組的價格是多少?」
小美想查:要找出這兩款椅子的價格
A: 3900, 5200 折扣後價格
1 | SELECT |
BETWEEN:
情境 10:價格區間
客人:「想找 10000 到 20000 之間的商品有哪些?」
小美想查:列出這個價格區間的所有商品
A: 日式雙人床架、掀床五尺雙人床、北歐風餐桌
1 | SELECT |
情境 11:庫存區間
主管:「請列出庫存在 5 到 15 之間的商品」
小美想查:列出庫存數量在這個範圍的商品
A: 典雅三人座沙發、工業風電視櫃、簡約書櫃、玄關鞋櫃、日式雙人床架、餐椅四入組、實木咖啡桌
1 | SELECT |
NOT IN:
情境 12:排除商品
主管:「列出除了沙發和床架以外的商品」
小美想查:要找出不是沙發和床架的商品
A: 工業風電視櫃、簡約書櫃、玄關鞋櫃、電腦辦公椅、餐椅四入組、北歐風餐桌、實木咖啡桌、電競書桌
1 | SELECT |
更新和刪除:
情境 13:調整價格
主管:「北歐風雙人沙發要調降 2000 元」
小美想查:要如何更新這張沙發的價格
A: 37900
1 | UPDATE products |
情境 14:更新庫存
主管:「電腦辦公椅進了 5 張」
小美想查:要如何增加這款椅子的庫存數量
A: 25
1 | UPDATE products |
情境 15:清除資料
主管:「要清掉兒童床架和電競書桌的資料」
小美想查:要如何刪除這兩項商品
1 | A: |
上一位同學的問題
上一位同學題目:庫存為0的商品,補貨數量10件。
1 | A: |
出給下位同學的問題
如果路過的朋友也可以嘗試回答看看哦
1 | Q: 請找出所有存貨低於五件的商品,將折扣價提升至原價的 10%,並且這些商品種類不包含床架,再將存貨多於十件的商品狀態改為 inactive,請列出所有被更新過價格及更改過狀態的 商品名稱、庫存、狀態,最後將狀態為 inactive 的商品刪除。 |
Conclusion & 結論
雖然之前有胡亂摸過 Sequelize,但大致上都是透過 ORM 直接性的操作 SQL,並不是真的完全懂資料庫,希望能藉由這次的體驗營一虧資料庫的世界。
這次的節奏還是很符合一貫的六角風格,進度緩慢但是能充分吸收,只是還是希望散落在各地的資訊可以統一整合,這過程除了要跑到直播平台網站去解任務,還要到 Discord 去鎖定訊息,另外分組也是臨時知道,過程中其實滿讓人會有焦慮感。