1. 程式人生 > >經典的Mysql多表的關聯查詢。。。

經典的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;