透過「家具店的菜雞銷售奇遇記」來學 PostgreSQL 資料庫指令啦!再次參加六角學院體驗營,這次是學習後端?
距離上一次更新部落格竟然是兩年半前的事情了。說來慚愧,除了工作忙碌,其實就是很多理由 XD 一直有想回來更新的想法,但內心雜音、要做的事情太多,一直沒有成行。這一次再度參與六角學驗的體驗營,就趁好來趁這次的機會,更新一下學習筆記 XD
經歷了兩年前端工作的磨練,慢慢對於前端技能有了一些感覺。但其實我的初次工作經驗,也就是實習其實是寫 PHP 後端的,在後來的正職工作與接案上,其實也接觸了不少後端。這也讓我開始在思考說,是否可以往全端技能樹發展了?但其實資料庫是我的硬傷,尤其是在大學時,資料庫就是我最不拿手的科目沒有之一(誒),也是其中一個我為何後來想轉往前端的原因 XDD 但既然想往全端技能發展,勢必資料庫就是我不能逃避的技能了,剛好就趁這一次的體驗營,來好好重新梳理資料庫的內容吧!
事前準備
執行環境
我們會使用 PG SQL 這個線上平台來執行 PostgreSQL 指令。
初始語法
首先,要先建立 poducts 資料表,先定義資料表的欄位類型後,透過 INSERT INTO 新增指令建立預設資料。
1 |
|
事前都準備好後,接下來就進入「家具店的菜雞銷售奇遇記」的奇幻冒險吧!
P.S. 以下故事本身就是題目,所以如果有在其他地方看到同樣的故事,是正常的哦~
故事 … 開始!!
剛進入『築夢家居』當銷售顧問的小美,,沒想到第一天上班就遇到系統大當機,最扯的是這間老字號家具店只有 POS 機和資料庫,也沒有網站可以查詢。
偏偏今天是週年慶開跑,主管又在門市坐鎮,店裡生意好到不行,只好硬著頭皮詢問店裡的工程師大大…
(門市內)
客人:我要看那個貓抓皮沙發,你們還有貨嗎?
小美:(慌張)啊…貓抓皮沙發…
(急著用 LINE 問小明)
小美:學長救命!要怎麼查這個沙發?
小明:用等於就可以了:
1 |
|
小美:喔!就是以下這樣,對嗎?
1 |
|
小明:對!很快就上手了嘛!
小美:(快速輸入…)哇!真的查到了!只剩一張庫存耶…
客人:(不耐煩)小姐?到底有沒有啊?
小美: 這款 L 型沙發目前最後一張特價 52900,要幫您預訂嗎?
客人:哦?最後一張喔…那…就先訂起來好了!
小明:!!!這麼快就會了?根本是資料庫天才 == b
小明:那我再考你幾題,如果你都會了以後,那我就可以退休了ㄏㄏㄏ
小美:…..
基礎比較運算
情境 1:單品查詢
客人:「這張北歐風雙人沙發多少錢?」
小美想查:想找到這張沙發的價格和庫存
1 |
|
首先,使用 select 語法來查詢 products 資料表裡面的內容,並且因為題目需要價格與庫存,因此撈了 price 與 stock 欄位,我這邊多撈了 name 欄位來幫助識別。
最後,加上 where 條件,將 name 鎖定在題目所指定的「北歐風雙人沙發」。
情境 2:價格比較
客人:「請列出 5000 元以下的櫃子有哪些?」
小美想查:找出櫃子類且價格在 5000 以下的商品
1 |
|
這次沒特別指定欄位,所以我就 select 星號把全部欄位給撈出來,並且透過 where 來撈出符合價格低於 5000 的商品出來。
情境 3:庫存確認
客人:「日式雙人床架還有貨嗎?」
小美想查:確認日式雙人床架的庫存狀況
1 |
|
因為是確認庫存狀況,所以撈了 status 以及提供識別的 name,並且透過 where 篩選出 name 等於日式雙人床架的欄位,來確認庫存狀況。
邏輯運算 AND
情境 4:預算內的商品
客人:「想找 4 萬以下,而且有現貨的沙發」
小美想查:要同時符合:是沙發、4萬以下、有庫存
1 |
|
首先透過 select 查詢 products 資料表後,where 的判斷分別下了 category 等於沙發、price 要小於 40000、status 等於 active 的三個條件式,並且透過 AND 來串接條件式,表示這三個條件同時需要符合,不然就不會回傳該筆資料。
情境 5:特價且有貨
客人:「沙發有哪些特價且現貨的品項?」
小美想查:要找到沙發類且有特價(原價大於優惠價)且還有庫存的商品
1 |
|
此題需要符合價格 price 要大於優惠價 discount_price,表示該商品目前有折扣,如果兩者相等代表這個商品目前沒有折扣。因此 where 的條件下了 price 要大於 discount_price,直接透過欄位比較來下條件,並且同時需要符合 status 等於 active 才能撈出所需條件的筆數。
邏輯運算 OR
情境 6:多分類查詢
客人:「我要找櫃子或桌子」
小美想查:要找出櫃子類或桌子類的商品
1 |
|
此題要撈分類等於「沙發」與「卓子」的欄位,但如果使用 AND 就變成要同時符合,但是題目設計上分類只會分別等於沙發、卓子,所以就會與題目要求不相符。所以此時就需要使用到 OR,這樣只要 OR 前後有其中一項符合,就會撈出該筆資料,如此一來就會將分類等於沙發或是桌子的筆數撈出來。
情境 7:指定商品
客人:「北歐風雙人沙發和貓抓皮L型沙發哪個還有貨?」
小美想查:要找出這兩張特定沙發的庫存狀況
1 |
|
這次撈出題目指定的庫存狀況 status 與方便識別的商品名稱 name,在 where 讀不份透過 OR 來將商品名稱為「北歐風雙人沙發」與「貓抓皮L型沙發」資料撈出來。
IN 運算
情境 8:多分類查詢
客人:「客廳的家具有哪些?我要看沙發、櫃子跟桌子」
小美想查:要找出沙發、櫃子和桌子這三種分類的商品
1 |
|
如果照情境 6 的做法,就會是要透過兩個 or 將上面三個分類的條件式列出來,如果條件一多其實滿累人,程式碼又很冗長 XD 但是透過 in 的方式,等於是只要 category 有符合右邊括號內的其中一個元素(可以理解成陣列元素)就會將資料撈出來。
情境 9:特定商品
客人:「電腦辦公椅和餐椅四入組的價格是多少?」
小美想查:要找出這兩款椅子的價格
1 |
|
邏輯基本上跟上面一樣,撈出商品名稱為「電腦辦公椅」與「餐椅四入組」的商品名稱與價格。
BETWEEN
情境 10:價格區間
客人:「想找 10000 到 20000 之間的商品有哪些?」
小美想查:列出這個價格區間的所有商品
1 |
|
透過 BETWEEN 數字一 AND 數字二 可以撈出價格在這兩個數字之間的資料,所以透過這個語法來撈出價格在 10000 到 20000 之間的資料。
情境 11:庫存區間
主管:「請列出庫存在 5 到 15 之間的商品」
小美想查:列出庫存數量在這個範圍的商品
1 |
|
將庫存在 5 到 15 之間的商品撈出來。
NOT IN
情境 12:排除商品
1 |
|
這個指令會將分類是「分類」與「床架」以外的資料撈出來。
更新和刪除
情境 13:調整價格
主管:「北歐風雙人沙發要調降 2000 元」
小美想查:要如何更新這張沙發的價格
1 |
|
透過 Update 指令可以更新 products 資料表內的 price 欄位,以題目來說會將商品名稱為「北歐風雙人沙發」的價格 price 更新為 price 在減 2000
情境 14:更新庫存
主管:「電腦辦公椅進了 5 張」
小美想查:要如何增加這款椅子的庫存數量
1 |
|
這個題目會將原本電腦辦公椅的庫存再加上 5 筆庫存。
情境 15:清除資料
主管:「要清掉兒童床架和電競書桌的資料」
小美想查:要如何刪除這兩項商品
1 |
|
這個題目結合了上面提到的 IN,會將商品名稱為「兒童床架」與「電競書桌」的資料給刪除。
故事結束
發現透過情境來學習,增加了一些有趣程度寫起來會有種不一樣的感覺 XDD 尤其是在資料庫這種我不擅長的科目,開心不少(?)希望可以趁這次機會把一直沒機會學好的資料庫理解更深入!
本站所有文章除特別聲明外,均採用 BY-NC-SA 許可協議。轉載請註明出處!