数据库实验——更新和删除数据

知识储备:

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 编程能力,还锻炼了问题解决能力和逻辑思维能力。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值