MySchool 04 高级查询 上机题

  1. --上机题1    
  2. --参加oop最近一次考试时间的最高分数和最低分数    
  3. select MAX(studentresult), MIN(studentresult) from Result    
  4. where ExamDate=    
  5. (    
  6. select MAX(ExamDate) from Result     
  7. where SubjectId=    
  8. (    
  9. select SubjectId from Subject where SubjectName='oop'    
  10. )    
  11. )    
  12. and SubjectId=    
  13. (    
  14. select SubjectId from Subject where SubjectName='oop'    
  15. )    
  16. --上机题2 
  17. --使用in关键字的子查询来查询S1学期开设的课程 
  18. select SubjectName from Subject    
  19. where GradeId in    
  20. (    
  21.     select GradeId from Grade where GradeName='S1'    
  22. --上机题3    
  23. --查询某课程最近一次考试缺考的学生名单   
  24. select studentno, StudentName from Student     
  25. where StudentNo not in    
  26. (    
  27.   select StudentNo from Result    
  28.   where SubjectId=    
  29.   (    
  30.   select SubjectId from Subject where SubjectName='oop'    
  31.   )    
  32.   and ExamDate=    
  33. (    
  34. select MAX(ExamDate) from Result     
  35. where SubjectId=    
  36. (    
  37. select SubjectId from Subject where SubjectName='oop'    
  38. )    
  39. )    
  40. )    
  41.  and GradeId=    
  42. (    
  43. select GradeId from Subject where SubjectName='oop'    
  44. )   
  45. --上机题4    
  46. --检查并更新S1的学生为S2    
  47. if exists(  
  48. select studentno,StudentName from Student     
  49. where StudentNo in    
  50. (    
  51.   select StudentNo from Student where    
  52.   GradeId=    
  53.   (    
  54.   sleelct GradeId from grade where GradeName='S1'    
  55.   )    
  56. )    
  57. )    
  58. begin  
  59. update Student set GradeId=2    
  60. where GradeId in    
  61. (    
  62.   select GradeId from Grade where GradeName='S1'     
  63. )    
  64. end  
  65. --上机题5 
  66. select studentname,(select GradeName from Grade)as Gradename,subjectname,examdate,studentresult from  Student,Subject,Result    
  67. where result.StudentNo in    
  68. (    
  69.    select MAX(ExamDate) from Result    
  70.    group by SubjectId    
  71. --上机题6    
  72. --SQL语句的综合运用   
  73. --赋值科目名称为oop    
  74. declare @subjectName varchar(50)    
  75. SET @subjectName='oop'    
  76. --科目为oop最近考试时间    
  77. declare @date datetime    
  78. select @date=MAX(examdate) from Result    
  79. inner join Subject on Result.SubjectId=Subject.SubjectId    
  80. where SubjectName=@subjectName    
  81. --课程oop的编号    
  82. declare @subjectNo int    
  83. select @subjectNo=SubjectId from Subject where SubjectName=@subjectName    
  84. --统计考试缺考情况 
  85. SELECT 应到人数=(    
  86.                  SELECT COUNT(*)  FROM Student     
  87.                  INNER JOIN Subject ON Subject.GradeId=Student.GradeId     
  88.                  WHERE SubjectName= @subjectName    
  89.                  ) ,  
  90.       实到人数=(     
  91.                 SELECT COUNT(*) FROM Result     
  92.                 WHERE ExamDate=@date AND SubjectNo=@subjectNo    
  93.                ),    
  94.       缺考人数=(    
  95.                  SELECT COUNT(*)  FROM Student     
  96.                  INNER JOIN Subject ON Subject.GradeId=Student.GradeId     
  97.                  WHERE SubjectName= @subjectName    
  98.               ) -    
  99.               (    
  100.                  SELECT COUNT(*) FROM Result     
  101.                  WHERE ExamDate=@date AND SubjectNo=@subjectNo    
  102.               ) 
  103. --统计考试通过情况,并将统计结果存放在新表TempResult中--    
  104. IF EXISTS(SELECT * FROM sysobjects WHERE name='TempResult')    
  105.   DROP TABLE TempResult 
  106. SELECT  Student.StudentName,Student.StudentNo,StudentResult,    
  107.         IsPass=CASE     
  108.                  WHEN StudentResult>=60  THEN 1    
  109.                  ELSE 0    
  110.                END    
  111.  INTO TempResult     
  112. FROM Student LEFT JOIN (    
  113.                          SELECT * FROM Result  WHERE ExamDate=@date AND SubjectNo=@subjectNo    
  114.                         ) R    
  115. ON Student.StudentNo=R.StudentNo    
  116. WHERE GradeId=(SELECT GradeId FROM Subject WHERE SubjectName= @subjectName)     
  117. SELECT * FROM TempResult  
  118. DECLARE @avg numeric(4,1)     
  119. SELECT @avg=AVG(StudentResult) FROM TempResult WHERE StudentResult IS NOT NULL   
  120. --判断平均分是否低于60分。如果低于60分,设置平均分为60分    
  121. IF (@avg<60)      
  122.  SET @avg=60         
  123. --循环加分,最高分不能超过97分    
  124. WHILE (1=1)     
  125. BEGIN      
  126.    IF(NOT Exists(SELECT * FROM TempResult WHERE StudentResult<@avg))    
  127.       BREAK    
  128.    ELSE    
  129.      UPDATE TempResult SET StudentResult=StudentResult+1    
  130.      WHERE StudentResult<@avg AND StudentResult<97    
  131. END   
  132.  --因为提分,所以需要更新IsPass(是否通过)列的数据    
  133. UPDATE TempResult     
  134.   SET IsPass=CASE    
  135.                WHEN StudentResult>=60  THEN 1    
  136.                ELSE  0    
  137.             END    
  138. SELECT * FROM newTable    
  139. --显示考试最终通过情况    
  140. SELECT 姓名=StudentName,学号=StudentNo,     
  141.        成绩=CASE     
  142.               WHEN StudentResult IS NULL THEN '缺考'    
  143.               ELSE  CONVERT(varchar(5),StudentResult)    
  144.             END,    
  145.    是否通过=CASE     
  146.               WHEN isPass=1 THEN '是'    
  147.               ELSE  '否'    
  148.            END    
  149.  FROM TempResult      
  150. --显示通过率及通过人数    
  151. SELECT 总人数=COUNT(*) ,通过人数=SUM(IsPass),    
  152.        通过率=(CONVERT(varchar(5),AVG(IsPass*100))+'%')  FROM TempResult     
  153. GO    
  154. [sql] view plain copy 在CODE上查看代码片派生到我的代码片  
  155. //经典案例    
  156. --参加oop最近一次考试时间的最高分数和最低分数    
  157. select MAX(studentresult), MIN(studentresult) from Result    
  158. where ExamDate=    
  159. (    
  160. select MAX(ExamDate) from Result     
  161. where SubjectId=    
  162. (    
  163. select SubjectId from Subject where SubjectName='oop'    
  164. )    
  165. )    
  166. and SubjectId=    
  167. (    
  168. select SubjectId from Subject where SubjectName='oop'    
  169. )    
  170. ----参加oop最近一次考试时间的学生姓名和学生编号     
  171. select studentno, studentname from Student    
  172. where StudentNo in    
  173. (    
  174.   select StudentNo from result     
  175.   where subjectid=    
  176.   (    
  177.    select subjectid from Subject where SubjectName='oop'    
  178.   )    
  179.   and ExamDate=    
  180.   (    
  181.   select MAX(ExamDate) from Result     
  182.   where subjectid=    
  183.   (    
  184.    select subjectid from Subject where SubjectName='oop'      
  185.   )    
  186.   )    
  187. )     
  188. --案例:检查“oop”课程最近一次考试。--如果有分以上的成绩,则每人提分;    
  189. --否则,每人提分。最终的成绩不得大于分    
  190. if exists(    
  191.  select studentresult from Result    
  192.    where subjectid=    
  193.   (    
  194.    select subjectid from Subject where SubjectName='oop'       
  195.   )    
  196.   and ExamDate=    
  197.   (    
  198.   select MAX(ExamDate) from Result     
  199.   where subjectid=    
  200.   (    
  201.    select subjectid from Subject where SubjectName='oop'        
  202.   )    
  203.   )    
  204.  and StudentResult>80     
  205. )    
  206. begin    
  207. update Result set StudentResult=100    
  208.   where subjectid=    
  209.   (    
  210.    select subjectid from Subject where SubjectName='oop'        
  211.   )    
  212.   and ExamDate=    
  213.   (    
  214.   select MAX(ExamDate) from Result     
  215.   where subjectid=    
  216.   (    
  217.    select subjectid from Subject where SubjectName='oop'       
  218.   )    
  219.   )    
  220. and StudentResult>98       
  221. update Result set StudentResult+=2    
  222.   where subjectid=    
  223.   (    
  224.    select subjectid from Subject where SubjectName='oop'           
  225.   )    
  226.   and ExamDate=    
  227.   (    
  228.   select MAX(ExamDate) from Result     
  229.   where subjectid=    
  230.   (    
  231.    select subjectid from Subject where SubjectName='oop'          
  232.   )    
  233.   )    
  234. and StudentResult<=98    
  235. end    
  236. else   
  237. begin    
  238. update Result set StudentResult+=5    
  239.   where subjectid=    
  240.   (    
  241.    select subjectid from Subject where SubjectName='oop'           
  242.   )    
  243.   and ExamDate=    
  244.   (    
  245.   select MAX(ExamDate) from Result     
  246.   where subjectid=    
  247.   (    
  248.    select subjectid from Subject where SubjectName='oop'           
  249.   )    
  250.   )    
  251.     
  252. end    

你可能感兴趣的:(MySchool 04 高级查询 上机题)