# 🏅 Day 18 - SQL 相關語法 (2) 有一間廠商即將建置「**健身教練線上直播課平台**」 **其優點是:** - **小班制健身直播課制**:教練會在平台開課,學生前往教練開設的課程頁面報名,課程時間到了後,就可點擊課程直播室進行上課 - 堂數售價:每位健身教練的收費都一致,一堂 50 分鐘**小班制健身直播課**都是 200 元 #### 堂數組合包方案 - 7 堂組合包方案: - 價格:1,400 元 - 14 堂方案: - 價格:2,520 元 - 21 堂方案: - 價格:4,800 元 ## 需要必備的知識點 1. [子查詢(子查詢 (Subquery))章節 - 三部影片請都檢視完再作答](https://courses.hexschool.com/courses/2025-node-js/lectures/58664093) ## 情境講解 1. 為滿足商業需求的組合包方案,於是建立了 `CREDIT_PACKAGE` 資料表,來記錄各組合包資訊 2. 客戶在買的訂單記錄,都會記錄在 `CREDIT_PURCHASE` 資料表中 ## 資料庫預設資訊與欄位介紹 1. **USER**:使用者資料 2. **CREDIT_PACKAGE**:組合包方案 * credit_amount:堂數 * price:金額 4. **CREDIT_PURCHASE**:客戶購買課程堂數 * user_id:使用者(USER) 的 id 資訊 * purchased_credits:購買堂數 * price_paid:購買金額 ```sql CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE TABLE "USER" ( "id" uuid PRIMARY KEY NOT NULL DEFAULT (gen_random_uuid()), "name" varchar(50) NOT NULL, "email" varchar(320) UNIQUE NOT NULL, "role" varchar(20) NOT NULL, "created_at" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP), "updated_at" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP) ); CREATE TABLE "CREDIT_PACKAGE" ( "id" serial PRIMARY KEY, "name" varchar(50) NOT NULL, "credit_amount" integer NOT NULL, "price" numeric(10,2) NOT NULL, "created_at" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP) ); CREATE TABLE "CREDIT_PURCHASE" ( "id" uuid PRIMARY KEY NOT NULL DEFAULT (gen_random_uuid()), "user_id" uuid NOT NULL REFERENCES "USER"(id), "credit_package_id" integer NOT NULL REFERENCES "CREDIT_PACKAGE"(id), "purchased_credits" integer NOT NULL, "price_paid" numeric(10,2) NOT NULL, "created_at" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP), "purchase_at" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP) ); ``` ## 題目 **請將先下面內容加入到資料庫指令後,再行答題** ``` CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE TABLE "USER" ( "id" uuid PRIMARY KEY NOT NULL DEFAULT (gen_random_uuid()), "name" varchar(50) NOT NULL, "email" varchar(320) UNIQUE NOT NULL, "role" varchar(20) NOT NULL, "created_at" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP), "updated_at" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP) ); CREATE TABLE "CREDIT_PACKAGE" ( "id" serial PRIMARY KEY, "name" varchar(50) NOT NULL, "credit_amount" integer NOT NULL, "price" numeric(10,2) NOT NULL, "created_at" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP) ); CREATE TABLE "CREDIT_PURCHASE" ( "id" uuid PRIMARY KEY NOT NULL DEFAULT (gen_random_uuid()), "user_id" uuid NOT NULL REFERENCES "USER"(id), "credit_package_id" integer NOT NULL REFERENCES "CREDIT_PACKAGE"(id), "purchased_credits" integer NOT NULL, "price_paid" numeric(10,2) NOT NULL, "created_at" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP), "purchase_at" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP) ); ``` **並加入預設資料:** ``` INSERT INTO "USER"(name, email, role) VALUES ('王小明', 'ming@hexschooltest.io', 'USER'), ('好野人', 'richman@hexschooltest.io', 'USER') ``` **1\. 新增**:在 `CREDIT_PACKAGE` 資料表新增三筆資料,資料需求如下: - 名稱為 `7 堂組合包方案`,價格為`1,400` 元,堂數為`7` - 名稱為`14 堂組合包方案`,價格為`2,520` 元,堂數為`14` - 名稱為 `21 堂組合包方案`,價格為`4,800` 元,堂數為`21` **2\. 新增**:在 `CREDIT_PURCHASE` 資料表,新增三筆資料:(請使用 name 欄位做子查詢) - `王小明` 購買 `14 堂組合包方案` - `王小明` 購買 `21 堂組合包方案` - `好野人` 購買 `14 堂組合包方案` ```sql -- 王小明提示範例 insert into "CREDIT_PURCHASE" (user_id, credit_package_id, purchased_credits, price_paid) values ((select id from "USER" where email = 'wXlTq@hexschooltest.io'), (select id from "CREDIT_PACKAGE" where name = '14 堂組合包方案'), (select credit_amount from "CREDIT_PACKAGE" where name = '14 堂組合包方案'), (select price from "CREDIT_PACKAGE" where name = '14 堂組合包方案')) ``` <!-- 解答: 1. 新增:在 CREDIT_PACKAGE 資料表新增三筆資料,資料需求如下: INSERT INTO "CREDIT_PACKAGE" (name, price, credit_amount) VALUES ('7 堂組合包方案', 1400, 7), ('14 堂組合包方案', 2520, 14), ('21 堂組合包方案', 4800, 21); 2. 新增:在 CREDIT_PURCHASE 資料表,新增三筆資料:(請使用 name 欄位做子查詢) -- 插入三筆資料 INSERT INTO "CREDIT_PURCHASE"(user_id, credit_package_id, purchased_credits, price_paid) VALUES ( (SELECT id FROM "USER" WHERE email = 'ming@hexschooltest.io'), (SELECT id FROM "CREDIT_PACKAGE" WHERE name = '14 堂組合包方案'), (SELECT credit_amount FROM "CREDIT_PACKAGE" WHERE name = '14 堂組合包方案'), (SELECT price FROM "CREDIT_PACKAGE" WHERE name = '14 堂組合包方案') ), ( (SELECT id FROM "USER" WHERE email = 'ming@hexschooltest.io'), (SELECT id FROM "CREDIT_PACKAGE" WHERE name = '21 堂組合包方案'), (SELECT credit_amount FROM "CREDIT_PACKAGE" WHERE name = '21 堂組合包方案'), (SELECT price FROM "CREDIT_PACKAGE" WHERE name = '21 堂組合包方案') ), ( (SELECT id FROM "USER" WHERE email = 'richman@hexschooltest.io'), (SELECT id FROM "CREDIT_PACKAGE" WHERE name = '14 堂組合包方案'), (SELECT credit_amount FROM "CREDIT_PACKAGE" WHERE name = '14 堂組合包方案'), (SELECT price FROM "CREDIT_PACKAGE" WHERE name = '14 堂組合包方案') ); --> 回報區 --- | # | Discord | CodePen / 答案 | |---|---|---| | 01 | Tau | [CodePen](https://codepen.io/Tau-Hsu/pen/zxOQVmm?editors=0010) | | 02 | daffytseng | [CodePen](https://codepen.io/Daffy-Tseng/pen/emOaqZb) | | 03 | sui_hsilan | [CodePen](https://hackmd.io/seasR9i6RVyDc74R-py8UQ?edit) | | 04 | adengg | [CodePen](https://codepen.io/Osases/pen/azogoMV?editors=0010) | | 05 | CC(tofuuu_cat) | [CodePen](https://codepen.io/CC-cat/pen/NPKZWxx?editors=0010) | | 06 | 馬德 | [CodePen](https://codepen.io/maywang/pen/QwLRXJM?editors=0010) | | 07 | pja._. | [CodePen](https://codepen.io/PJA0103/pen/gbYNOdP?editors=0010) | | 08 | bian_yang_mofa | [CodePen](https://codepen.io/cssf998811/pen/EaYBjPy?editors=0010) | | 09 | poyi | [CodePen](https://codepen.io/poyi-the-flexboxer/pen/yyBdORO?editors=0010) | | 10| benson | [CodePen](https://codepen.io/DevilButler/pen/WbeqwVQ?editors=0010) | | 11| Tammy | [CodePen](https://codepen.io/Tammy_Tsai/pen/JoPQEym) | | 12| ZoeKang|[CodePen](https://codepen.io/byehywmx-the-animator/pen/azogGZx?editors=0010)| | 13| helena |[CodePen](https://codepen.io/helena27/pen/emOwKmO)| | 14| ss585801 |[CodePen](https://codepen.io/ss585801/pen/yyBxBde?editors=0010)| |15| janetlai|[Codepen](https://codepen.io/eiddkqxz-the-builder/pen/gbYNdWg) |16| sian|[Codepen](https://codepen.io/uxitysjl-the-flexboxer/pen/azogPoP?editors=0010) |17| JC|[Codepen](https://codepen.io/lifetimingwhisper/pen/ByBXGJB) | 18 | hsin yu | [CodePen](https://codepen.io/tina2793778/pen/EaxxjQx) | | 19 | HarryKuo | [CodePen](https://codepen.io/harry_kuo/pen/NPWWqVE?editors=0010)| | 20. | 地呱 | [Codepen](https://codepen.io/wiibxzdw-the-bold/pen/xbxxGQZ?editors=0010) | |21.|Lee|[CodePen](https://codepen.io/leemo-tseng/pen/raNVPZZ?editors=1010)| | 22. | JerryOOO |[CodePen](https://codepen.io/fatiangel/pen/raNxXMX?editors=0010)| |23.|Arsian Kuo|[CodePen](https://codepen.io/Arsian-Kuo/pen/KwKaLYb)| |24.|wuyuli_21403| [CodePen](https://codepen.io/Job-Wilhelm/pen/wBveGQg?editors=1010) | |25.|shiang| [CodePen](https://codepen.io/shiang29/pen/EaxbmKy?editors=0010) | -->| | | |