SQL查询语句问题(50分)

  • 主题发起人 主题发起人 sunwork
  • 开始时间 开始时间
S

sunwork

Unregistered / Unconfirmed
GUEST, unregistred user!
我有表一,表二,表三,
基本信息表
basic
表一:stunum 编号
name 姓名
grade 年级
class 班级
成绩表
chievement
表二:stunum 编号
chinese 语文
english 英语
maths 数学

文理分科信息表
major
表三:
major 分科(文科或者理科)
grade 年级
class 班级

表一和表二用stunum关联,表三没有外键。

我想查找高二文科班的所有学生成绩,如何写这条语句呢?

 
你把三个表的字段合为一个或两个表不就简单多了么。^_^
我的觉得这样子规划不合理,数据关系应该重新规划,而是不强拧着要靠程序语言来实现。
 
select * from chievement
where stunum in
(select stunum from basic
where grade+class in (select grade+class from major where major='文科' and grade='高二')
)

或者

select b.* from
(select b.stunum from
major a
left join basic b
on a.grade=b.grade and a.class=b.class
where a.major='文科' and a.grade='高二'
) a
left join chievement b
on a.stunum=b.stunum

——未经测试,仅供参考。
 
agree with dq
 
这样试试:

select a.name,a.grade,a.class,b.chinese,b.english,b.maths
from basic a,chievement b,major c
where c.major="文科"
and c.grade="高二"
and a.grade=c.grade
and a.class=c.class
and b.stunum=a.stunum

在空表上执行通过
 
将这三个表合成一个或两个表的话,数据冗余量会变大的,我觉得这样组织表结构是
可行的。
当然,能做成视图的话会更方便
 
同意foolaliu
 
select b.name,b.grade,b.class,c.chinese,c.english,c.maths
from basic b,chievement c,major m
where m.major="文科"
and m.grade="高二"
and b.grade=m.grade
and b.class=m.class
and c.stunum=b.stunum
 
用内关联很可能会取到重复无用数据的。
 
to foolaliu ,我是使用SQL 7的,好象不行,通不过
 
同意dq的第一方案
 
我就是在Sql 7上执行的阿,不过是空表的罢了。

 
SELECT a.stunum , a.name , b.chinese , b.english , b.maths
FROM basic AS a,chievement AS b,major AS c
WHERE a.stunum = b.stunum AND a.grade = c.grade AND c.major='文科' AND a.grade='高二'
ORDER BY a.stunum
 
同意dq的答案 他提醒了我的IN 用法
最后我的实现
select * from chievement
where stunum in
(select stunum from basic
where grade = '高二' and class in (select class from major where major='文科' and grade='高二')
)

 
后退
顶部