一、實驗名稱和性質
刪除修改數據
驗證?設計
二、實驗目的
1.掌握數據操作-- 刪除、修改;
三、實驗的軟硬件環境要求
硬件環境要求:
?????? PC機(單機)
使用的軟件名稱、版本號以及模塊:
?????? Windows? 10,SQL Server 2019
四、知識準備
1.數據刪除的語句格式:
DELETE ?[FROM]? 表名 ??[WHERE ?字句]
3.據修改格式:
UPDATE 表名 ?SET? 字段名=表達式 [,…]? [WHERE 字句]
五、實驗內容
1.數據的修改操作;
2.數據的刪除操作;
六、驗證性實驗
(1)生成實驗數據? (表名自己加學號后三位)
SELECT ?*? INTO STUDENTAXXX FROM STUDENTXXX
?? SELECT ?*? INTO SCOREAXXX FROM SCOREXXX WHERE? DEGREE <0
? INSERT? SCOREAXXX??? SELECT? *? FROM SCOREXXX
? --注:下面修改和刪除數據,在STUDENTAXXX,SCOREAXXX中操作
(2)數據的修改刪除
1. 把所有人的出生日期中的月份減1
?UPDATE STUDENTAXXX set Sbirthday=DATEADD(MONTH, -1,Sbirthday)
?2. 把陳文文 的出生日期中年加1,班級改為95033
? UPDATE STUDENTAXXX set Sbirthday=DATEADD(year,1,Sbirthday),Class='95033' where Sname='陳文文'
3. 把95033班所有男生的出生日期中的日減1,女生的出生日期中的日加1
?UPDATE STUDENTAXXX set Sbirthday=case ssex when? '男' THEN DATEADD(DAY,-1,Sbirthday)
????????????????????????????????? WHEN '女' THEN? DATEADD(DAY,1,Sbirthday) END?
????????????????????????????? ? where Class='95033'
4. 把課程號3-105的所有成績減10
? UPDATE SCOREAXXX SET Degree-=10 WHERE CNO='3-105'
5. 把課程計算機導論的所有成績加10
? ??? UPDATE SCOREAXXX SET Degree+=10 WHERE CNO=(select cno from Course where Cname='計算機導論')?? --子查詢
6.? 把李君帥的所有成績減10
??? UPDATE SCOREAXXX?? SET Degree=Degree- 10 FROM STUDENTAXXX S JOIN SCOREAXXX SC ON SC.Sno=S.Sno WHERE Sname='李君帥'?? --連接
7.? 把李君帥的計算機導論成績加10?
? UPDATE SCOREAXXX?? SET Degree=Degree+ 10 FROM STUDENTAXXX S JOIN SCOREAXXX SC ON SC.Sno=S.Sno
? ??? join Course C ON SC.CNO=C.CNO WHERE? Sname='李君帥' AND? Cname='計算機導論'
8. 刪除學號109課程 3-245的成績
?? delete from? SCOREAXXX WHERE SNO='109' AND CNO='3-245'
9. 刪除曾華慶的 數字電路 成績?
??? delete?? SCOREAXXX WHERE SNO=(select sno from STUDENTAXXX where sname='曾華慶' ) AND? CNO=(select cno from Course where Cname='數字電路')
10.刪除STUDENTAXXX的所有數據
TRUNCATE TABLE? STUDENTAXXX
11.刪除SCOREAXXX的所有數據
? delete?? SCOREAXXX
12.其他,運行以下語句,觀察結果,分別得到什么結論?
--1. SET ANSI_NULLS {ON | OFF}
SET ANSI_NULLS ON? --默認
select? * FROM SCOREXXX WHERE DEGREE <>NULL
select? * FROM SCOREXXX WHERE DEGREE? =NULL
select? * FROM SCOREXXX WHERE DEGREE? is not null
select? * FROM SCOREXXX WHERE DEGREE? is? null
SET ANSI_NULLS OFF
select? * FROM SCOREXXX WHERE DEGREE <>NULL
select? * FROM SCOREXXX WHERE DEGREE? =NULL
select? * FROM SCOREXXX WHERE DEGREE? is not null
select? * FROM SCOREXXX WHERE DEGREE? is? null
SET ANSI_NULLS ON
--2.SET QUOTED_IDENTIFIER { ON | OFF }
SET QUOTED_IDENTIFIER?? ON? --默認
SELECT? SNO,'CNO',DEGREE FROM SCOREXXX
SELECT? SNO,"CNO",DEGREE FROM SCOREXXX
SELECT? SNO,[CNO],DEGREE FROM SCOREXXX
SET QUOTED_IDENTIFIER?? Off
SELECT? SNO,'CNO',DEGREE FROM SCOREXXX
SELECT? SNO,"CNO",DEGREE FROM SCOREXXX
SELECT? SNO,[CNO],DEGREE FROM SCOREXXX
SET QUOTED_IDENTIFIER?? On
--3. top ...?? WITH TIES
select top 3? * from SCOREXXX
select top 3? WITH TIES * from SCOREXXX
select top 3? WITH TIES * from SCOREXXX? order by sno
select top 30? percent???? * from SCOREXXX? order by sno
select top 30 percent WITH TIES?? * from SCOREXXX? order by sno
?
select top 20 percent WITH TIES?? * from SCOREXXX? order by sno
--4. ANY, SOME, ALL
SEELCT * FROM SCOREXXX ?where Degree? >= all(select degree from SCOREXXX )
SEELCT * FROM SCOREXXX ?where Degree? >= all(select degree from SCOREXXX where Degree is not null )
SEELCT * FROM SCOREXXX where Degree? < any(select degree from SCOREXXX where sno =’101’) and sno =’101’
SEELCT * FROM SCOREXXX where Degree? < some(select degree from SCOREXXX where sno =’103’) and sno =’103’
七、設計性實驗
1.實驗要求
(1)重新生成實驗數據(STUDENTAXXX,SCOREAXXX)
(2)刪除修改數據(STUDENTAXXX,SCOREAXXX中操作,每題一個語句完成)
1. 把陳文文改名為陳文且出生日期中年月日都加1
UPDATE STUDENT023
SET Sname = '陳文',
??? Sbirthday = DATEADD(DAY, 1, DATEADD(MONTH, 1, DATEADD(YEAR, 1, Sbirthday)))
WHERE Sname = '陳文文'
2.把學號101所有成績加10,最大不超過100
? UPDATE SCORE023
SET Degree = CASE WHEN Degree + 10 > 100 THEN 100 ELSE Degree + 10 END
WHERE SNO = '101'
3. 把男生所有成績加10%,女生所有成績加10,最大不超過100
?? UPDATE SCORE023
SET Degree = CASE
??? WHEN Ssex = '男' THEN
??????? CASE WHEN Degree * 1.1 > 100 THEN 100 ELSE ROUND(Degree * 1.1, 0) END
??? ELSE
??????? CASE WHEN Degree + 10 > 100 THEN 100 ELSE Degree + 10 END
??? END
FROM SCORE023 SC
JOIN STUDENT023 ST ON SC.SNO = ST.SNO
?4.把張旭 老師任課所有及格成績減10,最低不小于60
??
UPDATE SCORE023
SET Degree = CASE WHEN Degree - 10 < 60 THEN 60 ELSE Degree - 10 END
WHERE CNO IN (SELECT CNO FROM teacher023 WHERE Tname = '張旭')
AND Degree >= 60
5. 把曾華慶同學 的張旭 老師任課所有及格成績加10%,最大不超過100
???
UPDATE SCORE023
SET Degree = CASE WHEN Degree * 1.1 > 100 THEN 100 ELSE ROUND(Degree * 1.1, 0) END
WHERE SNO = (SELECT SNO FROM STUDENT023 WHERE Sname = '曾華慶')
AND CNO IN (SELECT CNO FROM? teacher023 WHERE Tname =? '張旭')
AND Degree >= 60
6. 刪除成為null的成績
DELETE FROM SCORE023 WHERE Degree IS NULL
7. 刪除王芳芳 的操作系統成績
DELETE FROM SCORE023
WHERE SNO = (SELECT SNO FROM STUDENT023 WHERE Sname = '王芳芳')
AND CNO = (SELECT CNO FROM COURSE023 WHERE Cname = '操作系統')
8.刪除曾華慶同學 的張旭 老師任課所有成績
???
DELETE FROM SCORE023
WHERE SNO = (SELECT SNO FROM STUDENT023 WHERE Sname = '曾華慶')
AND CNO IN (SELECT CNO FROM teacher023 WHERE Tname = '張旭')
9. 刪除女生的計算機導論成績
DELETE SCORE023
FROM SCORE023 SC
JOIN STUDENT023 ST ON SC.SNO = ST.SNO
JOIN COURSE023 C ON SC.CNO = C.CNO
WHERE ST.Ssex = '女' AND C.Cname = '計算機導論'
10.刪除本月過生日的男同學信息
DELETE FROM STUDENT023
WHERE Ssex = '男'
AND MONTH(Sbirthday) = MONTH(GETDATE())
2.實驗報告要求
通過本實驗,我掌握了:
- 使用UPDATE語句修改表中的數據
- 使用DELETE語句刪除表中的數據
- 復雜條件更新和刪除的實現方法
- 多表連接在更新和刪除中的應用
- 子查詢在更新和刪除中的應用
遇到的問題:
- 日期計算時需要注意邊界情況
- 百分比計算時需要考慮四舍五入
- 多表連接更新時需要注意表之間的關系