SqlServer:修改和删除数据

更新数据

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 数据库技术实用教程》,胡伏湘、肖玉朝 主编,清华大学出版社

posted @ 2021-05-27 00:13  乌漆WhiteMoon  阅读(2965)  评论(0编辑  收藏  举报