更新數據
UPDATE 語句
修改記錄的 SQL 語句是 UPDATE,用於更新記錄中某一個字段的值。UPDATE 語句的語法格式是如下,使用 WHERE 子句指出哪些行要更新,用 SET 關鍵字指定新值,輸入值的類型必須與所定義的數據類型一致。
UPDATE 表名
SET 列名 = 表達式[,…n]
[WHERE 條件]
在一條 UPDATE 命令可以同時對幾個字段的值進行修改,如果沒有 WHERE 條件子句,所有記錄的這一列的值全部改為同一個值。如果加了 WHERE 條件,則只對符合條件的記錄修改。
更新樣例
假設 Student 和 Score 2 張表中有如下一些數據:
樣例一
把所有人的出生日期中的月份減 1,直接使用 SET 指定修改的值。
UPDATE Student
SET Sbirthday = DATEADD(MONTH, -1, Sbirthday)
樣例二
把課程號 3-105 的所有成績減 10,在上一個樣例的基礎上加上 WHERE 進行過濾。
UPDATE Score
SET Degree -= 10
WHERE Cno = '3-105'
樣例三
把學號 101 所有成績加 10,最大不超過 100,使用 CASE WHEN THEN 語句令 UPDATE 能多分支地更新數據。
UPDATE Score SET Degree =
CASE WHEN Degree < 90 THEN Degree + 10
WHEN Degree >= 90 THEN 100
END
WHERE Sno = 101
樣例四
把男生所有成績加 10%,女生所有成績加 10(最大不超過 100),需要連接 Score 表和 Student 表獲得性別信息。
UPDATE Score SET Degree =
CASE WHEN S.ssex = '男' AND Degree < 90.9 THEN Degree * 1.1
WHEN S.ssex = '女' AND Degree < 90 THEN Degree + 10
ELSE 100 END
FROM Score SC JOIN Student S ON SC.Sno = S.Sno
WHERE Degree != NULL
樣例五
假設 Course 表中有如下一些數據:
把課程計算機導論的所有成績加 10,使用子查詢查出“計算機導論”的課程號作為過濾條件。
UPDATE Score
SET Degree += 10
WHERE Cno = (SELECT Cno FROM Course WHERE Cname = '計算機導論')
刪除數據
DELETE 語句
刪除記錄的 SQL 語句是 DELETE,其格式如下所示。
DELETE [FROM] 表名
[WHERE 條件]
FROM 可以省略,如果不帶條件,則刪除所有記錄。如果帶條件,則刪除符合條件的記錄,刪除后的記錄無法恢復。
刪除樣例
樣例一
刪除成為 null 的成績。
DELETE FROM Score WHERE Degree is NULL
樣例二
刪除王芳芳的操作系統成績,需要連接 Student 表和 Course 表再進行過濾。
DELETE Score
FROM Score SC
JOIN Student S ON S.Sno = SC.Sno
JOIN Course C ON SC.Cno = C.Cno
WHERE S.Sname = '王芳芳' AND C.Cname = '系統成績'
參考資料
《SqlServer 2014 數據庫技術實用教程》,胡伏湘、肖玉朝 主編,清華大學出版社