24、查询学生平均成绩及其名次
 
     SELECT 1+(SELECT COUNT( distinct 平均成绩)  
 
             FROM (SELECT S#,AVG(score) AS 平均成绩
 
                     FROM SC  
 
                 GROUP BY S#  
 
                 ) AS T1  
 
           WHERE 平均成绩> T2.平均成绩) as 名次,  
 
     S# as 学生学号,平均成绩
 
   FROM (SELECT S#,AVG(score) 平均成绩
 
           FROM SC  
 
       GROUP BY S#  
 
       ) AS T2  
 
   ORDER BY 平均成绩desc;  
 
  
 
25、查询各科成绩前三名的记录:(不考虑成绩并列情况)  
 
     SELECT t1.S# as  学生ID,t1.C# as  课程ID,Score as  分数
 
     FROM SC t1  
 
     WHERE score IN (SELECT TOP 3 score  
 
             FROM SC  
 
             WHERE t1.C#= C#  
 
           ORDER BY score DESC  
 
             )  
 
     ORDER BY t1.C#;  
 
26、查询每门课程被选修的学生数
 
 SELECT c#,count(S#) FROM sc GROUP BY C#;  
 
27、查询出只选修了一门课程的全部学生的学号和姓名
 
 SELECT SC.S#,Student.Sname,count(C#) AS 选课数
 
  FROMSC ,Student  
 
  WHERESC.S#=Student.S# GROUP BY SC.S# ,Student.Sname having count(C#)=1;  
 
28、查询男生、女生人数
 
   SELECT count(Ssex) as  男生人数FROM StudentGROUP BY Ssex having Ssex='男';  
 
   SELECT count(Ssex) as  女生人数FROM StudentGROUP BY Ssex having Ssex='女';
 
29、查询姓“张”的学生名单
 
   SELECT Sname FROM Student WHERE Sname like '张%';  
 
30、查询同名同性学生名单,并统计同名人数
 
 SELECT Sname,count(*) FROM Student GROUP BY Sname having count(*)>1;;  
 
31、年出生的学生名单(注:Student表中Sage列的类型是datetime)  
 
   SELECT Sname,  CONVERT(char (11),DATEPART(year,Sage)) as age  
 
   FROM student  
 
   WHERE  CONVERT(char(11),DATEPART(year,Sage))='1981';  
 
32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列
 
   SELECT C#,Avg(score) FROM SC GROUP BY C# ORDER BY Avg(score),C# DESC ;  
 
33、查询平均成绩大于的所有学生的学号、姓名和平均成绩
 
   SELECT Sname,SC.S# ,avg(score)  
 
   FROM Student,SC  
 
   WHERE Student.S#=SC.S# GROUP BY SC.S#,Sname having   avg(score)>85;  
 
34、查询课程名称为“数据库”,且分数低于的学生姓名和分数
 
   SELECT Sname,isnull(score,0)  
 
   FROM Student,SC,Course  
 
   WHERE SC.S#=Student.S# AND SC.C#=Course.C# AND  Course.Cname='数据库'and score<60;  
 
35、查询所有学生的选课情况;
 
   SELECT SC.S#,SC.C#,Sname,Cname  
 
   FROM SC,Student,Course  
 
   WHERE SC.S#=Student.S# AND SC.C#=Course.C# ;  
 
36、查询任何一门课程成绩在分以上的姓名、课程名称和分数;
 
   SELECT  distinct student.S#,student.Sname,SC.C#,SC.score  
 
   FROM student,Sc  
 
   WHERE SC.score>=70 AND SC.S#=student.S#;  
 
37、查询不及格的课程,并按课程号从大到小排列
 
   SELECT c# FROM sc WHERE scor e <60 ORDER BY C# ;  
 
38、查询课程编号为且课程成绩在分以上的学生的学号和姓名;
 
   SELECT SC.S#,Student.Sname FROM SC,Student WHERE SC.S#=Student.S# ANDScore>80 AND C#='003';  
 
39、求选了课程的学生人数
 
   SELECT count(*) FROM sc;  
 
40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩
 
   SELECT Student.Sname,score  
 
   FROM Student,SC,Course C,Teacher  
 
   WHERE Student.S#=SC.S# AND SC.C#=C.C# AND C.T#=Teacher.T# AND Teacher.Tname='叶平' AND SC.score=(SELECTmax(score)FROM SC WHERE C#=C.C# );  
 
41、查询各个课程及相应的选修人数
 
   SELECT count(*) FROM sc GROUP BY C#;  
 
42、查询不同课程成绩相同的学生的学号、课程号、学生成绩
 
 SELECT distinct  A.S#,B.score FROM SC A  ,SC B WHERE A.Score=B.ScoreAND A.C# <>B.C# ;  
 
43、查询每门功成绩最好的前两名
 
   SELECT t1.S# as  学生ID,t1.C# as  课程ID,Score as  分数
 
     FROM SC t1  
 
     WHERE score IN (SELECT TOP 2 score  
 
             FROM SC  
 
             WHERE t1.C#= C#  
 
           ORDER BY score DESC  
 
             )  
 
     ORDER BY t1.C#;  
 
44、统计每门课程的学生选修人数(超过人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,查询结果按人数降序排列,若人数相同,按课程号升序排列  
 
   SELECT  C# as 课程号,count(*) as人数
 
   FROM  sc   
 
   group  by  C#  
 
   order  by  count(*) desc,c#   
 
45、检索至少选修两门课程的学生学号
 
   SELECT  S#   
 
   FROM  sc   
 
   group  by  s#  
 
   having  count(*)  >  =  2  
 
46、查询全部学生都选修的课程的课程号和课程名
 
   SELECT  C#,Cname   
 
   FROM  Course   
 
   WHERE  C#  in  (SELECT  c#  FROM  sc group by  c#)   
 
47、查询没学过“叶平”老师讲授的任一门课程的学生姓名
 
   SELECT Sname FROM Student WHERE S# not in (SELECT S# FROM Course,Teacher,SCWHERE Course.T#=Teacher.T# AND SC.C#=course.C# AND Tname='叶平');  
 
48、查询两门以上不及格课程的同学的学号及其平均成绩
 
   SELECT S#,avg(isnull(score,0)) FROM SC WHERE S# in (SELECT S# FROM SC WHEREscore <60 GROUP BY S# having count(*)>2)GROUP BY S#;