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 )