日期:2014-05-19  浏览次数:20528 次

求简单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
同理