知识储备:
1.数据删除的语句格式:
DELETE [FROM] 表名 [WHERE 字句]
2.数据修改的语句格式:
UPDATE 表名 SET 字段名=表达式 [,…] [WHERE 字句]
3.CASE-WHEN语句格式:
CASE 表达式
WHEN value1 THEN result1
WHEN value2 THEN result2
...
ELSE default_result
END
实验内容:
1.数据的修改操作;
2.数据的删除操作;
实验操作:
1. 把陈文文改名为陈文且出生日期中年月日都加1
USE STU039
UPDATE STUDENTA039 SET SNAME='陈文',SBIRTHDAY=DATEADD(MONTH,+1,DATEADD(YEAR,+1,DATEADD(DAY,+1,SBIRTHDAY)))
WHERE SNAME='陈文文'
SELECT * FROM STUDENTA039
WHERE SNAME='陈文文'
关键点:这里运用了DATEADD()函数,是一个经典的日期函数。

2.把学号101所有成绩加10,最大不超过100
UPDATE SCOREA039
SET DEGREE = CASE
WHEN DEGREE + 10 > 100 THEN 100
ELSE DEGREE + 10
END
WHERE SNO = '101';
关键点:这里运用了CASE-WHEN语句,针对不同的情况做了不同返回的处理。

3. 把男生所有成绩加10%,女生所有成绩加10,最大不超过100
UPDATE SCOREA039
SET DEGREE = CASE
WHEN SSEX='女' THEN
CASE WHEN DEGREE+ 10 > 100 THEN 100 ELSE DEGREE+ 10
END
WHEN SSEX='男'THEN
CASE WHEN DEGREE*1.1>100 THEN 100 ELSE DEGREE*1.1
END
ELSE DEGREE
END
FROM SCOREA039 SC JOIN STUDENTA039 S ON SC.SNO=S.SNO
SELECT * FROM SCOREA039 SC JOIN STUDENTA039 S ON SC.SNO=S.SNO
关键点:这里运用了CASE-WHEN语句的嵌套,要注意不可少掉语句最后的END,若没有END语句则FROM语句会报错。

4.把张旭老师任课所有及格成绩减10,最低不小于60
USE STU039
UPDATE SCOREA039
SET DEGREE = CASE
WHEN DEGREE-10<60 THEN 60 ELSE DEGREE-10 END
FROM SCOREA039 SC JOIN Course039 C ON SC.CNO=C.CNO JOIN teacher039 T ON C.TNO=T.TNO
WHERE TNAME='张旭'
SELECT * FROM SCOREA039 SC JOIN Course039 C ON SC.CNO=C.CNO JOIN teacher039 T ON C.TNO=T.TNO
WHERE TNAME='张旭'
关键点:这里同样是CASE-WHEN语句的使用,但不同点是表的连接。
5. 把曾华庆同学 的张旭 老师任课所有及格成绩加10%,最大不超过100
USE STU039
UPDATE SCOREA039
SET DEGREE = CASE
WHEN DEGREE*1.1>100 THEN 100 ELSE DEGREE*1.1 END
FROM STUDENTA039 S JOIN SCOREA039 SC ON S.SNO=SC.SNO JOIN Course039 C ON SC.CNO=C.CNO JOIN teacher039 T ON C.TNO=T.TNO
WHERE TNAME='张旭' AND SNAME='曾华庆'
SELECT *
FROM STUDENTA039 S JOIN SCOREA039 SC ON S.SNO=SC.SNO JOIN Course039 C ON SC.CNO=C.CNO JOIN teacher039 T ON C.TNO=T.TNO
WHERE TNAME='张旭' AND SNAME='曾华庆'

6.删除成为null的成绩
USE STU039
DELETE SCOREA039
WHERE DEGREE IS NULL
SELECT * FROM SCOREA039
关键点:这里删除了为null的成绩,是一个经典语句

7. 删除王芳芳 的操作系统成绩
USE STU039
DELETE SCOREA039
WHERE SNO=(SELECT SNO FROM STUDENTA039 WHERE SNAME='王芳芳')
AND CNO=(SELECT CNO FROM Course039 WHERE CNAME='操作系统')
SELECT * FROM STUDENTA039 S JOIN SCOREA039 SC ON S.SNO=SC.SNO JOIN Course039 C ON SC.CNO=C.CNO

8.删除曾华庆同学的张旭老师任课所有成绩
USE STU039
DELETE SCOREA039
WHERE SNO=(SELECT SNO FROM STUDENTA039 WHERE SNAME='曾华庆')
AND CNO=(SELECT CNO FROM Course039 C JOIN TEACHER039 T ON C.TNO=T.TNO WHERE TNAME='张旭')
SELECT * FROM STUDENTA039 S JOIN SCOREA039 SC ON S.SNO=SC.SNO JOIN Course039 C ON SC.CNO=C.CNO JOIN TEACHER039 T ON C.TNO=T.TNO

9. 删除女生的计算机导论成绩
USE STU039
DELETE SCOREA039
WHERE SNO IN (SELECT SNO FROM STUDENTA039 WHERE SSEX='女')
AND CNO IN (SELECT CNO FROM Course039 C WHERE CNAME='计算机导论')
SELECT * FROM STUDENTA039 S JOIN SCOREA039 SC ON S.SNO=SC.SNO JOIN Course039 C ON SC.Cno=C.Cno

10.删除本月过生日的男同学信息
USE STU039
DELETE STUDENTA039
WHERE SSEX='男' AND MONTH(Sbirthday)=MONTH(GETDATE())
SELECT * FROM STUDENTA039

实验小结:
实验中遇到的问题、错误及解决方法:
1.在进行将“出生日期中年月日都加1”这一步的过程中,不知道如何同时将年月日都加一,上网查询后发现可以使用嵌套方法,即SBIRTHDAY=DATEADD(MONTH,+1,DATEADD(YEAR,+1,DATEADD(DAY,+1,SBIRTHDAY)))
2.在进行“把学号101所有成绩加10,最大不超过100”这一步时,不知道该怎么处理最大不超过100,结合之前的知识,发现可以使用case-when语句来进行处理。同时还学会了case-when语句的嵌套使用。同时要注意CASE-WHEN语句的格式必须书写正确。
3.在进行“删除女生的计算机导论成绩”这一步实验步骤时,在DELETE语句中,使用子查询 WHERE SNO=(SELECT SNO FROM STUDENTA039 WHERE SSEX='女') 和 AND CNO=(SELECT CNO FROM Course039 C WHERE CNAME='计算机导论') 存在问题。这两个子查询可能会返回多个值,而使用 = 运算符只能匹配单个值,所以会报错。应该使用IN运算符来处理可能返回多个值的子查询。
4.在进行日期修改操作时,对于不同数据库系统,日期函数的使用和语法可能存在差异。例如在不同数据库中使用 DATEADD 函数时,可能会因为函数参数的顺序或语法不同而导致错误。
实验体会和收获:
通过本次实验,更加深入地理解了 SQL 中数据修改和删除操作的原理和方法。掌握了UPDATE和DELETE语句的基本语法和使用场景,以及如何使用子查询和连接操作来实现复杂的数据修改和删除需求。在实验过程中遇到了各种问题,通过查阅资料、分析错误信息和不断尝试,最终解决了这些问题。这不仅提高了自己的 SQL 编程能力,还锻炼了问题解决能力和逻辑思维能力。
4415

被折叠的 条评论
为什么被折叠?



