iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 11
1
Software Development

從問題理解與活用SQL語法系列 第 11

第十一堂:家事管理 - 使用 DELETE 刪除多餘的實際做家事資料 (DELETE vs TRUNCATE vs DROP)

  • 分享至 

  • xImage
  •  

一、回顧:第十堂相關情境練習

題目:

將上一堂作業產生的「實際做家事」資料,家事項目不存在於家事項目清單的做家事資料,打掃開始時間(Start Time)與打掃結束 (End Time)時間設為NULL

實作結果

UPDATE cleanrecord
SET StartTime = NULL , EndTime = NULL
WHERE CleanRecordId IN (
                          SELECT CleanRecordId
                          FROM (SELECT *
                                FROM CleanRecord) AS SubQuery_CleanRecord
                          INNER JOIN cleanschedule
                          ON SubQuery_CleanRecord.CleanScheduleId = cleanschedule.CleanScheduleId
                          LEFT JOIN cleanitemlist
                          ON cleanschedule.CleanItem = cleanitemlist.CleanItem
                          WHERE cleanitemlist.CleanItem IS NULL
                       )

二、第二堂範例:刪除多餘的實際做家事資料

需求

昨天的課堂和作業,我們使用UPDATE 修改了家事項目不存在的排班表資料、實際做家事資料的資料
今天我們將使用DELETE 刪除這些資料

實作結果

DELETE
FROM CleanSchedule
WHERE CleanScheduleID IN (
                            SELECT CleanScheduleID
                            FROM (
                                   SELECT *
                                   FROM cleanschedule
                                 ) AS SubQuery_CleansShedule
                            WHERE cleanschedule.CleanItem IS NULL
                         )

三、 認識DELETE 語法

DELETE 
FROM 要刪除的資料表資料的資料表名稱 
WHERE 過濾資料表當中要刪除的資料;

四、DELETE VS TRUNCATE Table VS DROP Table

DELETE:適合刪除特定的資料

  1. 可以使用WHERE指定要刪除的資料
  2. 不會讓識別編號重置(Auto_Increment),使用DELETE刪除後再新增的資料,仍會從之前最後一個編號繼續編號下去
  3. DELETE是一筆一筆的刪除資料,且在交易記錄中每筆刪除的資料,都會記錄成一個項目,因此效率較Truncate 差。

Truncate:適合刪除所有的資料並重置識別編號

  1. 只能刪除表格當中的所有資料,無法使用WHERE指定要刪除的資料
  2. 會讓識別編號重置(Auto_Increment)
  3. Truncate Table只鎖定資料表和頁面,不會鎖定每個資料列進行刪除,因此效率較DELETE好

語法:

TRUNCATE TABLE 要刪除的資料表資料的資料表名稱;

DROP:適合刪除整張表格,刪除後將不存在於資料庫當中

DELETE 跟 Truncate 是針對「資料表裡面的資料」進行刪除
但是DROP刪除的部分包括:

  • 資料表結構定義
  • 所有資料
  • 索引
  • 觸發程序條件約束
  • 權限規格

語法:

DROP TABLE 要刪除的資料表資料的資料表名稱;

五、相關情境練習

第十一堂範例我們刪除了家事項目為NULL的排班資料(CleanSchedule)
請幫我刪除不存在於排班資料的實際做家事資料 (CleanRecord)


上一篇
第十堂:家事管理 - 使用Update修改休息的成員排班 (UPDATE + WHERE IN 相同的表格)
下一篇
第十二堂:家事管理 - 統計每個成員的負責家事次數排名 (Window Function - OVER 子句)
系列文
從問題理解與活用SQL語法30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言