04高级查询
来源:互联网 发布:虚拟专用网络 博客 编辑:程序博客网 时间:2024/06/05 02:00
-上机题1 --参加oop最近一次考试时间的最高分数和最低分数 select MAX(studentresult), MIN(studentresult) from Result where 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 Subject where 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的学生为S2 if exists( select studentno,StudentName from Student where StudentNo in ( select StudentNo from Student where GradeId= ( sleelct GradeId from grade where GradeName='S1' ) ) ) begin update Student set GradeId=2 where GradeId in ( select GradeId from Grade where GradeName='S1' ) end --上机题5 select studentname,(select GradeName from Grade)as Gradename,subjectname,examdate,studentresult from Student,Subject,Result where result.StudentNo in ( select MAX(ExamDate) from Result group by SubjectId ) --上机题6 --SQL语句的综合运用 --赋值科目名称为oop declare @subjectName varchar(50) SET @subjectName='oop' --科目为oop最近考试时间 declare @date datetime select @date=MAX(examdate) from Result inner join Subject on Result.SubjectId=Subject.SubjectId where SubjectName=@subjectName --课程oop的编号 declare @subjectNo int select @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 TempResult SELECT 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 ) R ON Student.StudentNo=R.StudentNo WHERE 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<97 END --因为提分,所以需要更新IsPass(是否通过)列的数据 UPDATE TempResult SET IsPass=CASE WHEN StudentResult>=60 THEN 1 ELSE 0 END SELECT * 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 [sql] view plain copy 在CODE上查看代码片派生到我的代码片//经典案例 --参加oop最近一次考试时间的最高分数和最低分数 select MAX(studentresult), MIN(studentresult) from Result where 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 Student where 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 ) begin update 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>98 update 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<=98 end else begin update 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
- 04高级查询
- 04高级查询
- 高级查询
- 高级查询
- 高级查询
- 高级查询
- 高级查询
- 高级查询
- 高级查询
- 高级查询
- 高级查询
- MySchool 04 高级查询 上机题
- Oracle高级技巧,高级查询
- mybatis高级查询-一对一查询
- Oracle 查询及高级查询
- SQL高级查询
- Oracle高级查询
- lucene.....高级查询
- ADO.NET操作MySQL数据库
- 微信公众号掉粉原因分析,公众号运营者请对照排查
- @Cacheable注解在spring3中的使用-实现缓存
- 使用RecyclerView完成聊天界面以及消息的更新
- IDEA中自动换行和标准线的设置
- 04高级查询
- 归并排序算法
- React/React Native 的ES5 ES6写法对照表
- 夕拾算法进阶篇:30)三维BFS广度搜索(图论)
- weex官方demo weex-hackernews代码解读(1)
- 设计模式之工厂方法模式(Factroy Method)
- memset和fill_n比较
- 设计模式——简单工厂模式
- 给android源码加个服务Service