求简单SQL查询语句
S表:学号 姓名
C表:课程号 学号 成绩
T表:课程号 老师名
1,求选择了李老师所有课程的学生姓名
2,求没选择李老师一门课程的学生姓名
3,求选择了所有课程的学生姓名
希望都能解答 解答一两个也给分! 谢谢各位了
------解决方案--------------------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 )
------解决方案--------------------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.课程号
------解决方案----------------------不简单了
--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.课程号))
------解决方案--------------------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
同理