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

sql 2005 行数比较
本帖最后由 cqcs0824 于 2012-11-08 11:13:50 编辑 求:查询选修了全部课程的学生信息

我是这样想的 先用  select count(*) from b  求出课程总数 然后 用select count(*)
from c group by sno  求出每个学生选修的课程数 通过比较得到满足条件的sno再得到学生信息  可是应该怎么比较行数 求大大们帮帮忙~   

表1学生信息   a
sno   sname  sex birthday Nation
08010101  张三  男 1992-05-02 汉
08050412  李孟才 男 1991-08-09 藏
08060945  王珊珊 女 1993-08-29 汉
08110207  杨彤  女 1994-05-30 汉

表2 课程信息    b                      
cno cname       credit
080601 C语言         3
080602 数据结构 4
080603 数据库原理 4
080604 操作系统 4
080605 编译原理 3.5

表3 成绩信息  c
sno          cno   score
08010101 080601 80
08010101 080602 79
08010101 080603 65
08060945 080601 98
08060945 080604 89
08050412 080601 85
08050412 080602 86
08110207 080602 65
08110207 080605 54

------最佳解决方案--------------------
select * from a where sno in(select sno from c group by sno 
          having count(*)=(select count(*) from b))
------其他解决方案--------------------
select a.sno,a.sname
from 表3 c,表1 a
where a.sno=c.sno
group by a.sno,a.sname
having count(*)=(select count(*) from 表2)

------其他解决方案--------------------
select *
from A 
where sno in (
select sno
from (
select sno,count(*) as num,(select count(*) from b) as cnum 
from c 
group by sno) as x
where num<>cnum)

------其他解决方案--------------------
select a.sno,a.sname
from 表3 c,表1 a
where a.sno=c.sno
group by a.sno,a.sname
having count(*)=(select count(*) 表2 from )