优化myshool 第六章上机练习
来源:互联网 发布:大数据导论 pdf 编辑:程序博客网 时间:2024/06/05 11:59
--上机练习一(批量插入学生考试成绩)
BEGIN TRANSACTIONDECLARE @errorSum INTSET @errorSum=0/*--插入数据--*/INSERT INTO Result(StudentNo,SubjectNo,ExamDate,StudentResult) VALUES(1,1,GETDATE(),90)SET @errorSum=@errorSum+@@errorINSERT INTO Result(StudentNo,SubjectNo,ExamDate,StudentResult) VALUES(1,1,GETDATE(),70)SET @errorSum=@errorSum+@@errorINSERT INTO Result(StudentNo,SubjectNo,ExamDate,StudentResult) VALUES(2,1,GETDATE(),67)SET @errorSum=@errorSum+@@errorINSERT INTO Result(StudentNo,SubjectNo,ExamDate,StudentResult) VALUES(2,1,GETDATE(),55)SET @errorSum=@errorSum+@@errorINSERT INTO Result(StudentNo,SubjectNo,ExamDate,StudentResult) VALUES(3,1,GETDATE(),102)--分数违反约束SET @errorSum=@errorSum+@@errorINSERT INTO Result(StudentNo,SubjectNo,ExamDate,StudentResult) VALUES(3,4,GETDATE(),90)SET @errorSum=@errorSum+@@errorINSERT INTO Result(StudentNo,SubjectNo,ExamDate,StudentResult) VALUES(4,4,GETDATE(),56)SET @errorSum=@errorSum+@@errorINSERT INTO Result(StudentNo,SubjectNo,ExamDate,StudentResult) VALUES(4,4,GETDATE(),88)SET @errorSum=@errorSum+@@errorINSERT INTO Result(StudentNo,SubjectNo,ExamDate,StudentResult) VALUES(5,4,GETDATE(),40)SET @errorSum=@errorSum+@@errorINSERT INTO Result(StudentNo,SubjectNo,ExamDate,StudentResult) VALUES(5,4,GETDATE(),65)SET @errorSum=@errorSum+@@error/*--根据是否有错误,确定事务是提交还是撤销--*/IF(@errorSum<>0) --如果有错误 BEGIN PRINT '插入失败,回滚事务' ROLLBACK TRANSACTION END ELSE BEGIN PRINT '插入成功,提交事务' COMMIT TRANSACTION ENDGO
--上机练习二(为毕业学生办理离校手续)
BEGIN TRANSACTIONDECLARE @errorSum INTSET @errorSum=0/*--查询Result表中所有Y2学员的考试成绩,保存到新表HistoreResult*/SELECT Result.* INTO HistoreResult FROM Result INNER JOIN Student ON Result.StudentNo=Student.StudentNoINNER JOIN Grade ON Grade.GradeId=Student.GradeId WHERE GradeName='Y2'SET @errorSum=@errorSum+@@error/*--删除Result表中所有Y2学员的考试成绩*/DELETE Result FROM Result JOIN Student ON Result.StudentNo=Student.StudentNoINNER JOIN Grade ON Grade.GradeId=Student.GradeId WHERE GradeName='Y2'SET @errorSum=@errorSum+@@error/*--将Student表中所有Y2的学员记录,保存到新表HistoryStudent*/SELECT Student.* INTO HistoryStudentFROM Student INNER JOIN Grade ON Grade.GradeId=Student.GradeId WHERE GradeName='Y2'SET @errorSum=@errorSum+@@error/*--删除Studet表中所有Y2学员记录*/DELETE Student FROM Student INNER JOIN Grade ON Grade.GradeId=Student.GradeId WHERE GradeName='Y2'SET @errorSum=@errorSum+@@error/*--根据是否有错误,确定事务是提交还是撤销--*/IF (@errorSum<>0) --如果有错误 BEGIN PRINT '插入失败,回滚事务' ROLLBACK TRANSACTION END ELSE BEGIN PRINT '插入成功,提交事务' COMMIT TRANSACTION ENDGO
--上机练习三(查看学生各学期考试成绩)
CREATE VIEW vw_student_result_infoAS SELECT 姓名=StudentName,学号=Student.StudentNo, 联系电话=Phone,学期=GradeName,成绩=Total FROM Student LEFT OUTER JOIN ( SELECT r.StudentNo,GradeName,SUM(StudentResult) Total FROM Result r INNER JOIN ( SELECT StudentNo,SubjectNo,MAX(ExamDate) ExamDate FROM Result GROUP BY StudentNo,SubjectNo) tmp ON r.ExamDate=tmp.ExamDate AND r.SubjectNo = tmp.SubjectNo AND r.StudentNo = tmp.StudentNo INNER JOIN Subject sub ON sub.SubjectNo = r.SubjectNo INNER JOIN Grade g ON g.GradeId = sub.GradeId GROUP By r.StudentNo,GradeName ) TmpResult2 ON Student.StudentNo = TmpResult2.StudentNo GROUP BY StudentName,Student.StudentNo,Phone,GradeName,TotalGOSELECT * FROM vw_student_result_info
USE MySchoolGOIF EXISTS (SELECT name FROM sysindexes WHERE name = 'IX_Result_StudentResult') DROP INDEX Result.IX_Result_StudentResult --删除索引GO--考试成绩列上创建可重复索引:填充因子为70%--CREATE INDEX IX_Result_StudentResult ON Result(StudentResult) WITH FILLFACTOR = 70GO--查询输出学生姓名、课程名称、考试日期和考试成绩 SELECT StudentName '学生姓名',SubjectName '课程名称',ExamDate '考试日期', StudentResult '考试成绩' FROM Subject,Student,ResultWITH (INDEX = IX_Result_StudentResult)WHERE StudentResult BETWEEN 80 AND 90 AND Student.StudentNo = Result.StudentNo AND Subject.SubjectId = Result.SubjectId
--课后简答题
--借阅事物
/**事务操作借书*/BEGIN TRANSACTIONDECLARE @errorSum intDECLARE @RID varchar(50)DECLARE @BID varchar(50)SELECT @RID=RID FROM Reader WHERE RName='张无忌'SELECT @BID=BID FROM Book WHERE BName='深入。Net平台和c#编程'SET @errorSum=0INSERT INTO Borrow(RID,BID)VALUES (@RID,@BID)SET @errorSum=@errorSum+@@errorUPDATE Book SET BCount=BCount-1 WHERE BName=' 深入。Net平台和c#编程'SET @errorSum=@errorSum+@@errorUPDATE Reader SET LendNum=LendNum+1 WHERE RName='张无忌'SET @errorSum=@errorSum+@@errorIF @errorSum<>0ROLLBACK TRANSACTIONELSE COMMIT TRANSACTIONGO
/**事务操作借书*/BEGIN TRANSACTIONDECLARE @errorSum intDECLARE @RID varchar(50)DECLARE @BID varchar(50)SELECT @RID=RID FROM Reader WHERE RName='刘冰冰'SELECT @BID=BID FROM Book WHERE BName='西游记'SET @errorSum=0INSERT INTO Penalty(RID,BID,PType,Amount) VALUES(@RID,@BID,'1',5.6)SET @errorSum=@errorSum+@@errorUPDATE Borrow SET ReturnDate=getdate() WHERE BID=@BIDSET @errorSum=@errorSum+@@errorUPDATE Reader SET LendNum=LendNum-1 WHERE RName='刘冰冰'SET @errorSum=@errorSum+@@errorUPDATE Book SET BCount=BCount+1 WHERE BID=@BIDSET @errorSum=@errorSum+@@errorIF @errorSum<>0ROLLBACK TRANSACTIONELSE COMMIT TRANSACTIONGO
USE LibraryGO--创建索引IF EXISTS (SELECT * FROM sysindexes WHERE name = 'IX_BOOK_BookName') DROP INDEX Book.IX_BOOK_BookName --删除索引/*--笔试列创建非聚集索引:填充因子为30%--*/CREATE INDEX IX_BOOK_BookName ON BOOK(BName) WITH FILLFACTOR = 30GO--创建管理员视图IF EXISTS (SELECT * FROM sysobjects WHERE NAME='view_borrow')Drop VIEW view_borrowgoCREATE VIEW view_borrow ASSELECT 图书名称=Book.BNAME,到期时间=Borrow.WillDate,读者姓名=Book.BNAME from Borrow,book with (index = IX_BOOK_BookName)WHERE Book.BID=Borrow.BID --order by Borrow.WillDateGOSELECT * FROM view_borrow--创建读者视图IF EXISTS(SELECT *FROM sysobjects WHERE NAME='view_book')DROP VIEW view_bookgoCREATE VIEW view_bookAs SELECT 图书名称=BNAME,图书总量=BCount,可借阅量=BCount-( SELECT COUNT(*) FROM Borrow WHERE returnDate is null AND Borrow.bid = Book.bid) FROM Book with (index = IX_BOOK_BookName)GOSELECT * FROM view_book
0 0
- 优化myshool 第六章上机练习
- 优化myshool第六章 事务 视图 索引 上机 简答
- 第六章上机练习
- 第六章上机练习
- 优化MyShool 第七章 存储过程
- 优化Myshool第四章高级查询
- 优化MySchool 第六章 上机
- 优化MySchool 第六章上机
- 优化Mychool 第六章上机
- 优化MySchool 第六章 上机
- HTML第六章上机练习3
- HTML第六章上机练习3
- HTML第六章上机练习5
- HTML第六章上机练习5
- 第六章上机练习5 聚美优品彩妆
- 第六章上机练习3 美容热点产品列表(1)
- 第六章 上机3
- 第六章 使用C#开发数据库应用系统 上机练习1-4
- 使用原生自定义View,setState刷新界面后UI不能正常显示
- Android 字符串分割split()
- IOS 用wifi做服务器的解决方案 CocoaHttpServer
- 杭电2025
- MongoDB 3.0 用户验证问题
- 优化myshool 第六章上机练习
- iOS开发技巧之:截取字符串中两个指定字符串中间的字符串
- 回调函数原理与使用案例
- 虚拟机使用ubuntu运行VS code出现界面黑屏时的解决办法
- Java Integer比较中的那些坑
- 模糊查询LIKE语句的SQL注入预防
- Hibernate_映射文件详解
- 用JS获取地址栏参数的方法
- Http协议与TCP协议易混淆点(一)