首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > VFP >

高手来帮帮忙.解决办法

2012-03-03 
高手来帮帮忙.有两个表student(学号,姓名,年龄,性别,籍贯)和enrolls(学号,课程号,成绩)要的结果是找出所有

高手来帮帮忙.
有两个表   student(学号,姓名,年龄,性别,籍贯)   和   enrolls(学号,课程号,成绩)
要的结果是   找出所有成绩高于90分的学生信息(包括姓名)和所有成绩不及格的学生信息(包括姓名)

select   a.学号,a.姓名,a.年龄,a.性别,a.籍贯,b.学号,b.课程号,b.成绩,   from   student   a,enrolls   b     where   a.学号=b.学号   and   b.成绩> 90   and   b.成绩 <60


按了回车后   提示命令不能识别!应该怎么写才是对的呢?

[解决办法]
select a.学号,a.姓名,a.年龄,a.性别,a.籍贯,b.课程号,b.成绩 from student a,enrolls b where a.学号=b.学号 and b.成绩> 90 and b.成绩 <60
[解决办法]
student(学号,姓名,年龄,性别,籍贯) 和 enrolls(学号,课程号,成绩)

select s.* '全部超过90分 ' from student s
left outer join
(
select s1.学号,
case when 成绩 is null then 0 else 成绩 end from student s1
left outer join enrolls e
on s1.学号 = e.学号
where 成绩 < 90
) temp
on temp.学号 = s.学号 and temp.成绩 is null
union all
select s.* '全部不及格 ' from student s
left outer join
(
select s1.学号,
case when 成绩 is null then 100 else 成绩 end from student s1
from student s1
left outer join enrolls e
on s1.学号 = e.学号
where 成绩 > 60
) temp
on temp.学号 = s.学号 and temp.成绩 is null

这个语句的思路比较特殊,我给你解释一下吧:
我们以全部分数都超过90分的为例吧:
我们要找到所有分数都超过90分的学生,也就是我们要排除所有没有成绩的学生或者有科目没有超过90的同学的全部名单,下面通过
select s1.学号,
case when 成绩 is null then 0 else 成绩 end from student s1
left outer join enrolls e
on s1.学号 = e.学号
where 成绩 < 90
找到所有分数小于90分,或者都没有成绩的同学的名单。
然后用student表与上面的这个子查询做左连接,如果成绩为null,则说明这个学生不在那个子查询中。也就是说明他所有分数都在90以上。

同理,所有成绩都不及格的同学也是这个思路的。
[解决办法]
student.name 学生姓名 student.num 学号
enrolls.num 学号 enrolls.class 课程号 enrolls.cj 成绩
select a.name,a.number,b.cj
from student a,enrolls b
where a.num = b.num and b.cj > '90 '
union all
select a.name,a.number,b.cj
from student a,enrolls b
where a.num = b.num and b.cj < '60 '

热点排行