日期:2014-05-17  浏览次数:20685 次

三道面试题目以及我的确答案不知道对不对....
三个表
S <sno     sanme
      学号     姓名
c <cno       cname       cteacher
    课号     课名称       老师
SC <sno       cno         scgrade
        学号     课号       成绩
 
问题:
1,选出没选eric老师的学生姓名  
2,学过1号课又有2号课的学生姓名。  
3,2门以上不及格的学生姓名和成绩  


select   S.same   from   S   Where   S.sno   in   (   select   SC.sno   from   C,SC   where   C.cteacher <> 'eric '   AND   SC.cno   =   C.con   )

select   S.same   from   S   Where   S.sno   in   (   select   SC.sno     from   SC   where   SC.cno   = '1号 '   AND   SC.cno   = '2号 '   group   sno   )

select   S.same   from   S   Where   S.sno   in   (   select   SC.sno   from   SC   Where   SC.scgrade <60   group   SC.cno   having   count(SC.cno)> =2)

------解决方案--------------------
1. select S.same from S Where S.sno in ( select SC.sno from C,SC where C.cteacher <> 'eric ' AND SC.cno = C.con )
要求选出没选eric老师的学生姓名, 楼主的写法不正确,举个例子,学生A选择了bree老师的课程和eric老师的课程,按照楼主的sql语句,结果中将会出现学生A的姓名,但是要求中是不能出现的

2. select S.same from S Where S.sno in ( select SC.sno from SC Where SC.scgrade <60 group SC.cno having count(SC.cno)> =2)
要求2门以上不及格的学生姓名和成绩,1)没有选择出成绩;2)group by SC.cno而不是group SC.cno