第四章高级查询--上机题和经典案例
来源:互联网 发布:严歌苓 知乎 编辑:程序博客网 时间:2024/04/30 18:02
--上机题1--参加oop最近一次考试时间的最高分数和最低分数select MAX(studentresult), MIN(studentresult) from Resultwhere ExamDate=(select MAX(ExamDate) from Result where SubjectId=(select SubjectId from Subject where SubjectName='oop'))and SubjectId=(select SubjectId from Subject where SubjectName='oop')--上机题2--使用in关键字的子查询来查询S1学期开设的课程select SubjectName from Subjectwhere GradeId in( select GradeId from Grade where GradeName='S1')--上机题3--查询某课程最近一次考试缺考的学生名单 select studentno, StudentName from Student where StudentNo not in( select StudentNo from Result where SubjectId= ( select SubjectId from Subject where SubjectName='oop' ) and ExamDate=(select MAX(ExamDate) from Result where SubjectId=(select SubjectId from Subject where SubjectName='oop')) ) and GradeId=(select GradeId from Subject where SubjectName='oop')--上机题4--检查并更新S1的学生为S2if exists(select studentno,StudentName from Student where StudentNo in( select StudentNo from Student where GradeId= ( sleelct GradeId from grade where GradeName='S1' )))beginupdate Student set GradeId=2where GradeId in( select GradeId from Grade where GradeName='S1' )end--上机题5select studentname,(select GradeName from Grade)as Gradename,subjectname,examdate,studentresult from Student,Subject,Resultwhere result.StudentNo in( select MAX(ExamDate) from Result group by SubjectId)--上机题6--SQL语句的综合运用--赋值科目名称为oopdeclare @subjectName varchar(50)SET @subjectName='oop'--科目为oop最近考试时间declare @date datetimeselect @date=MAX(examdate) from Resultinner join Subject on Result.SubjectId=Subject.SubjectIdwhere SubjectName=@subjectName--课程oop的编号declare @subjectNo intselect @subjectNo=SubjectId from Subject where SubjectName=@subjectName--统计考试缺考情况SELECT 应到人数=( SELECT COUNT(*) FROM Student INNER JOIN Subject ON Subject.GradeId=Student.GradeId WHERE SubjectName= @subjectName ) , 实到人数=( SELECT COUNT(*) FROM Result WHERE ExamDate=@date AND SubjectNo=@subjectNo ), 缺考人数=( SELECT COUNT(*) FROM Student INNER JOIN Subject ON Subject.GradeId=Student.GradeId WHERE SubjectName= @subjectName ) - ( SELECT COUNT(*) FROM Result WHERE ExamDate=@date AND SubjectNo=@subjectNo ) --统计考试通过情况,并将统计结果存放在新表TempResult中--IF EXISTS(SELECT * FROM sysobjects WHERE name='TempResult') DROP TABLE TempResultSELECT Student.StudentName,Student.StudentNo,StudentResult, IsPass=CASE WHEN StudentResult>=60 THEN 1 ELSE 0 END INTO TempResult FROM Student LEFT JOIN ( SELECT * FROM Result WHERE ExamDate=@date AND SubjectNo=@subjectNo ) RON Student.StudentNo=R.StudentNoWHERE GradeId=(SELECT GradeId FROM Subject WHERE SubjectName= @subjectName) SELECT * FROM TempResult DECLARE @avg numeric(4,1) SELECT @avg=AVG(StudentResult) FROM TempResult WHERE StudentResult IS NOT NULL--判断平均分是否低于60分。如果低于60分,设置平均分为60分IF (@avg<60) SET @avg=60 --循环加分,最高分不能超过97分WHILE (1=1) BEGIN IF(NOT Exists(SELECT * FROM TempResult WHERE StudentResult<@avg)) BREAK ELSE UPDATE TempResult SET StudentResult=StudentResult+1 WHERE StudentResult<@avg AND StudentResult<97END --因为提分,所以需要更新IsPass(是否通过)列的数据UPDATE TempResult SET IsPass=CASE WHEN StudentResult>=60 THEN 1 ELSE 0 ENDSELECT * FROM newTable--显示考试最终通过情况SELECT 姓名=StudentName,学号=StudentNo, 成绩=CASE WHEN StudentResult IS NULL THEN '缺考' ELSE CONVERT(varchar(5),StudentResult) END, 是否通过=CASE WHEN isPass=1 THEN '是' ELSE '否' END FROM TempResult --显示通过率及通过人数SELECT 总人数=COUNT(*) ,通过人数=SUM(IsPass), 通过率=(CONVERT(varchar(5),AVG(IsPass*100))+'%') FROM TempResult GO
//经典案例--参加oop最近一次考试时间的最高分数和最低分数select MAX(studentresult), MIN(studentresult) from Resultwhere ExamDate=(select MAX(ExamDate) from Result where SubjectId=(select SubjectId from Subject where SubjectName='oop'))and SubjectId=(select SubjectId from Subject where SubjectName='oop')----参加oop最近一次考试时间的学生姓名和学生编号select studentno, studentname from Studentwhere StudentNo in( select StudentNo from result where subjectid= ( select subjectid from Subject where SubjectName='oop' ) and ExamDate= ( select MAX(ExamDate) from Result where subjectid= ( select subjectid from Subject where SubjectName='oop' ) ))--案例:检查“oop”课程最近一次考试。--如果有分以上的成绩,则每人提分;--否则,每人提分。最终的成绩不得大于分if exists( select studentresult from Result where subjectid= ( select subjectid from Subject where SubjectName='oop' ) and ExamDate= ( select MAX(ExamDate) from Result where subjectid= ( select subjectid from Subject where SubjectName='oop' ) ) and StudentResult>80)beginupdate Result set StudentResult=100 where subjectid= ( select subjectid from Subject where SubjectName='oop' ) and ExamDate= ( select MAX(ExamDate) from Result where subjectid= ( select subjectid from Subject where SubjectName='oop' ) )and StudentResult>98update Result set StudentResult+=2 where subjectid= ( select subjectid from Subject where SubjectName='oop' ) and ExamDate= ( select MAX(ExamDate) from Result where subjectid= ( select subjectid from Subject where SubjectName='oop' ) )and StudentResult<=98endelsebeginupdate Result set StudentResult+=5 where subjectid= ( select subjectid from Subject where SubjectName='oop' ) and ExamDate= ( select MAX(ExamDate) from Result where subjectid= ( select subjectid from Subject where SubjectName='oop' ) )end
0 0
- 第四章高级查询--上机题和经典案例
- 第四章高级查询
- 第四章 高级查询
- 第四章:高级查询
- SQL 第四章高级查询
- SQL高级 第四章 高级查询
- 第四章 数据查询1(上机)
- 第四章 数据查询2 (上机)
- SQL经典---子查询和高级查询
- MySchool 04 高级查询 上机题
- 优化MySchool 第四章 高级查询
- 优化Myshool第四章高级查询
- 嵌套查询经典案例
- oracle 经典查询案例
- 数据查询经典案例
- 数值分析第四章上机实习题
- 第四章 上机4
- 第四章 上机4
- 寒假篇5-魔法照片
- poj 3352Road Construction(无向强连通分量 tarjan)
- 微信小程序日记——高仿知乎日报
- 欢迎使用CSDN-markdown编辑器
- 8953系列----parse vmlinux
- 第四章高级查询--上机题和经典案例
- 关于安卓手机自带返回键的处理问题
- POJ 2031Building a Space Station(叉积点积的应用 )
- 牙疼怎么办 立刻止疼
- 同步与异步的概念
- 23种设计模式(10):命令模式
- A卡和N卡
- React Native 二维码扫描 react-native-camera的使用
- oracle---角色和权限,补充