S表:学号 姓名
C表:课程号 学号 成绩
T表:课程号 老师名1,求选择了李老师所有课程的学生姓名
2,求没选择李老师一门课程的学生姓名
3,求选择了所有课程的学生姓名希望都能解答 解答一两个也给分! 谢谢各位了

解决方案 »

  1.   

    Select Sname
    from S,C,T
    where S.sid=C.sid and C.cid=T.cid and Tname='李老师'; 
    Select Sname
    from S,C,T
    where S.sid=C.sid and C.cid=T.cid and Tname!='李老师';
    Select Sname
    from S,C
    where S.sid=C.sid
      

  2.   

    select 姓名 From S JOIN C ON S.学号=C.学号 where C.课程号 IN(SELECT 课程号 FROM T WHERE 老师名='李老师')select 姓名 From S JOIN C ON S.学号=C.学号 where C.课程号 NOT  IN(SELECT 课程号 FROM T WHERE 老师名='李老师')
    select 姓名 From S JOIN C ON S.学号=C.学号 where C.课程号 IN(SELECT 课程号 FROM T )
      

  3.   

    1.SELECT S.姓名
    FROM S INNER JOIN
          C ON S.学号 = C.学号 INNER JOIN
          T ON C.课程号 = T.课程号
    WHERE (T.教师姓名 = 'li')2.SELECT S.姓名
    FROM S INNER JOIN
          C ON S.学号 = C.学号 INNER JOIN
          T ON C.课程号 = T.课程号
    WHERE (T.教师姓名 <> 'li')3.SELECT S.姓名
    FROM S INNER JOIN
          C ON S.学号 = C.学号 INNER JOIN
          T ON C.课程号 = T.课程号
      

  4.   

    select 姓名 From S JOIN C ON S.学号=C.学号 where C.课程号 IN(SELECT 课程号 FROM T WHERE 老师名='李老师')
    这句可能有点问题,用IN不能实现选择了全部李老师课程的功能
      

  5.   

    --不简单了
    --1
    select s.姓名 from s where not exists( select * from t where t.老师名='李老师' and not exists(select * from c where c.学号=s.学号 and t.课程号=c.课程号 ))
    --2
    select s.姓名 from s where not exists(select * from c,t where c.课程号=t.课程号 and c.学号=s.学号 and t.老师名='李老师')
    --3
    select s.姓名 from s where not exists(select * from t where not exists(select *from c where c.学号=s.学号 and c.课程号=t.课程号))
      

  6.   

    exists挺难掌握的,不会是哪个老师为难你们吧,哈哈
      

  7.   

    exists是比较难掌握的  试试理解下面的
    ----1
    select 学号 from (select distinct 课程号,学号 from c where 课程号 in (select t.课程号 from t where t.老师名='李老师')) group by 学号 having count(*)=(select count(*) from t where 老师名='李老师')---3
    同理