资源描述:
《数据库概论 SQL_数据更新.pptx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第3章SQL数据更新SQL数据更新功能InsertDeleteTruncateUpdateOutputMerge@@ROWCOUNT返回受上一语句影响的行数任何不返回行的语句将这一变量设置为0select*fromSselect@@rowcount插入操作的命令格式insertinto表名[(列名[,列名]…]values(值[,值]…)插入一条指定好值的行insertinto表名[(列名[,列名]…](子查询)插入子查询结果中的若干行插入显式行insertintoPROFvalues(P123,“王明”,35,D08,498),(P124,“李明”,38,D01,698)
2、insertintoPROF(P#,PNAME,D#)values(P123,“王明”,D08)思考:SAL取何值?如何防止插入带有空值的元组?插入子查询将平均成绩大于90的学生加入到EXCELLENT中insertintoEXCELLENT(S#,GRADE)selectS#,avg(GRADE)fromSCgroupby(S#)havingavg(GRADE)>90selectS#,avg(GRADE)intoEXCELLENT(S#,GRADE)fromSCgroupby(S#)havingavg(GRADE)>90批量插入复制一个数据文件至数据库表中bulkinse
3、rt表名from数据文件with(batchsize=指定批处理中的行数,check_constraints,datafiletype=数据文件类型,fieldterminator=字段终止符,maxerrors=所容忍的最大错误数目,rowterminator=行终止符)删除操作的命令格式deletefrom表名[where条件表达式]从表中删除符合条件的元组,如果没有where语句,则删除所有元组示例:清除所有选课记录deletefromSC删除操作示例删除王明老师所有的任课记录deletefromPCwhereP#in(selectP#fromPROFwherePNA
4、ME=“王明”)deletefromXfromPCXjoinPROFonX.p#=PROF.p#wherePNAME=“王明”删除操作删除低于平均工资的老师记录deletefromPROFwhereSAL<(selectavg(SAL)fromPROF)思考:是先找到所有符合条件的行,一并删除,还是找到一个删除一个?清空表truncatetable删除表中的所有行,而不记录单个行删除操作truncatetable在功能上与不带where子句的delete语句相同。但truncatetable比delete速度快,且使用的系统和事务日志资源少identity计数器重置为种子值
5、更新操作的命令格式update表名set列名=表达式
6、子查询列名=[,表达式
7、子查询]…[where条件表达式]指定对哪些列进行更新,以及更新后的值是什么示例:老师工资上调5%updatePROFsetSAL=SAL*1.05更新操作将D01系系主任的工资改为该系的平均工资updatePROFsetSAL=(selectavg(SAL)fromPROFwhereD#=D01)whereP#=(selectDEANfromDEPTwhereD#=D01)更新操作当C1课程的成绩小于该课程的平均成绩时,将该成绩提高5%updateSCsetGRADE=GRADE*1.05whe
8、reC#=C1andGRADE<(selectavg(GRADE)fromSCwhereC#=C1)如果是对任何一门课程呢墨菲定律工资超过2000的缴纳10%所得税,其余的缴纳5%所得税①updatePROFsetSAL=SAL*0.9whereSAL>2000②updatePROFsetSAL=SAL*0.95whereSAL<=2000updatePROFsetSAL=caseSALwhenSAL>2000thenSAL*0.9whenSAL<=2000thenSAL*0.95执行顺序是①,②,还是②,①?1-(1-p)n行拷贝:覆盖多列R(ID,A,B),S(ID,A
9、,B)updateRsetA=(selectS.AfromSwhereR.ID=S.ID),B=(selectS.BfromSwhereR.ID=S.ID)updateRsetR.A=S.A,R.B=S.BfromRjoinSonR.ID=S.IDwithupdateCTE(selectR.AA1,R.BB1,S.AA2,S.BB2fromRjoinSonR.ID=S.ID)updateupdateCTEsetA1=A2,B1=B2Output:记录更新历史执行修改操作只返回影响了多少行的信息,无从获知到底影响到了