資料庫管理 Database Managent Ex.1-4 SQL指令練習 系級:物理四 學號:49814201 姓名:吳嘉峰 授課老師:楊維邦 教授 日期:2013/04/08
目錄 檢視表格 Set Comparison 其它範例操作 心得感想 線上購物系統 課本P. 3-43, 3-54 課本CH3其它練習 替代性 效能
檢視表格 線上購物系統
檢視線上購物系統用表格 指令格式: CREATE TABLE 表格名稱 ( 欄位名稱1 資料型別(資料長度), 1. Customer 3. Smart_Phone 2. Order_list 4. Tabelt_Computer PRIMARY KEY(Order_Number) PRIMARY KEY(Order_Number) 指令格式: CREATE TABLE 表格名稱 ( 欄位名稱1 資料型別(資料長度), 欄位名稱2 資料型別(資料長度) PRIMARY KEY(欄位名稱) ) CREATE TABLE Customer ( Name char((16), Order_Number char(8) PRIMARY KEY(Order_Number) ) 設為PRIMARY KEY 表示該欄位不得為空值 且為唯一
檢視表格及資料
Set Comparison 課本P. 3-43, 3-54
Query: 排除網站中售價最高的手機 並顯示其他手機 比較操作範例 Query: 排除網站中售價最高的手機 並顯示其他手機
三種方法 1. Tuple Variables 2. Subqueries with ANY or SOME 3. Subquery Using RENAME 2. Subqueries with ANY or SOME Using SOME 3. Subquery Using subquery ( 課本P. 3-54 )
1. Using RENAME 價格22030的HTC One沒有被顯示! 指令語法: SELECT `欄位名稱` FROM `資料表1`, `資料表1` as 表格變數名稱 WHERE 敘述式 # 由敘述式決定要顯示的東西,重點在於可以利用Tuple Varibles來比較相同表格內的欄位
2. Using SOME 指令語法: SELECT `欄位` FROM `資料表1` WHERE `比較欄位1` < SOME 將上述語法中的SOME以ANY替代 指令語法: SELECT `欄位` FROM `資料表1` WHERE `比較欄位1` < SOME (SELECT `比較欄位2` FROM `資料表2` ) #子查詢 # SOME是ANY的別名,需與比較運算子(<, >, =)連用,若欄位1小於子查詢中欄位2的任意值,則return True。換句話說,欄位1中的值,只要比欄位2的其中一個小,就會被顯示出來。 與方法一得到相同的結果 與使用SOME得到相同的結果
3. Using Subquery 子查詢 與方法一、二結果相同 命名為temp,也可輸入「AS temp」
其它範例操作 課本CH3其它練習
Subqueries with ALL (P. 3-46) Query: 找出比ASUS PadFone 2 便宜的所有手機 篩選條件 指令語法: SELECT `欄位` FROM `資料表1` WHERE `比較欄位1` < ALL (SELECT `比較欄位2` FROM `資料表2` ) #子查詢 # ALL,需與比較運算子(<, >, =)連用,若欄位1小於子查詢中欄位2的所有值,則return True。換句話說,欄位1中的值,需要比欄位2的所有值小,才會被顯示出來。
Query: 找出最貴的手機 × The WITH Clause (P. 3-55) 替代方案1 MySQL不支援WITH 替代方案:子查詢 建立一個暫存的view,locally 替代方案1 expensive smart_phone × max_price data brand model price data MySQL不支援WITH 替代方案:子查詢 SQL語法: WITH 暫存表格(暫存欄位) AS #建立一個暫存的view SELECT `欄位名稱1` FROM `表格1` SELECT `欄位名稱` FROM `表格2`, 暫存表格 WHERE 敘述式 最高價手機:HTC ONE 價格:22030
Query: 找出最貴的手機 (替代方案2) × CREATE Views (P. 3-57) 指令語法: expensive smart_phone × max_price data brand model price data 與替代方案1結果相同 指令語法: CREATE VIEW 暫存表格 AS #建立一個暫存的view定義 SELECT `欄位名稱1` FROM `表格1` SELECT `欄位名稱` FROM `表格2`, 暫存表格 WHERE 敘述式
DROP Views 刪除剛剛建立的VIEW定義
Subqueries with IN (P. 3-63) Query: 刪除客戶資料中 已用現金付款的資料 顯示目前的客戶資料和訂單 指令語法: DELETE FROM `資料表1` WHERE `欄位1` IN (子查詢) #子查詢中出現的項目將會從資料表1中被刪除 剩下刷卡付款的資料
Case Statement for Updates (P. 3-69) 指令語法: UPDATE `表格1` SET `欄位名稱` = CASE WHEN 條件1 THEN 操作 ELSE 條件2 END 15600×0.9×0.8=11232 順序錯誤,商品打折兩次! Query: 調整手機售價, 若單價高於15000(含), 打9折,其餘打8折 錯誤示範! 操作順序影響結果 原價 原價 調整後價格 調整後價格 原價 錯誤價格
心得感想
心得感想 經過這麼多次的練習,我們可以發現,相 同的功能有很多方法可以完成,即使有些 指令在MySQL中不支援,我們依舊可以 用其它的指令來替代組合,達到目的。 在較小的系統中,我們或許不會發現不同 方法間的差異,但是當系統越來越龐大後, 我們就必須注意這些方法的效能差異了。 一但資料量增加,我們就必須去找出效能 最佳的方法才行。
The End. Thank you!