经典的Mysql多表的关联查询。。。

Student(S#,Sname,Sage,Ssex)学生表     S#:学号;Sname:学生姓名;Sage:学生年龄;Ssex:学生性别
Course(C#,Cname,T#)课程表             C#,课程编号;Cname:课程名字;T#:教师编号
SC(S#,C#,score)成绩表                  S#:学号;C#,课程编号;score:成绩
Teacher(T#,Tname)教师表                T#:教师编号; Tname:教师名字

问题:
1、查询“001”课程比“002”课程成绩高的学生的学号
  select a.S# from
  (select S#,C#,score from SC where C#=001') a, 
   (select S#, C#, score from SC where C#='002') b where a.score > b.score and a.S# = b.S#;  

   2、查询平均成绩大于60的所有学生的学号和平均成绩
   
    select S#, avg(score)
    from SC group by S# having avg(score) > 60;
  3、查询所有同学的学号、姓名、选课数、总成绩;
    select stu.S#, stu.Sname, count(SC.C#), sum(score) 
     from student stu left join SC on stu.S# = SC.S# group by stu.S#, stu.sname;     
  4、查询所有课程成绩小于60分的同学的学号、姓名;
     select S#, sname 
    from student where S# not in(select student.S# from student, SC where student.S# = SC.S# and score > 60); 
  5、查询没学过“叶平”老师课的同学的学号、姓名;
     select student.S#, student.sname 
      from student     where S# not in (select S# from teacher,course, sc where teacher.T# = course.T# and sc.C# = course.C# and teacher.tname = '叶平'); 
   6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;
    select S#, sname 
    from student, SC where student.S# = SC.S# and SC.C#='001' and exists (select * from SC as sc_2 where sc_2.S# = SC.S# and sc_2.C# = '002');
   7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;
   select S#, sname
   from student 
    where S# in (select S# from SC, course, teacher where SC.C# = course.C# and course.T# = teacher.T# and teachar.tname='叶平' group by S# having 
    count(SC.S#) = (select count(C#) from Course,Teacher  where Teacher.T#=Course.T# and Tname='叶平')
    ) 
    8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;
    seelct S#, sanme 
    from (select student.S#, student.sname, score, (select score from SC where SC.S# = student.S# and SC.C#='002') score_2 from student, SC
       where student.S# = SC.S# and SC.C# = '001') s_2 where score_2 < score; 

猜你喜欢

转载自blog.csdn.net/tryll/article/details/83690987