sql常用语句(二)

时间:2021-01-25 01:02:09

 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#;