sql select语句

来源:百度知道 编辑:UC知道 时间:2024/05/12 03:30:08
我有两张成绩表格,表一字段:学号,语文成绩
如 1 90
2 80
表二字段:学号,数学成绩
2 60
3 70
(特别说明:有些学号只有表一中存在,表二中不存在;有些学号表二中存在,表一中不存在;有些学号两张表中都存在)

如果执行select 表一.学号,表一.语文成绩,表二.数学成绩 from 表一,表二 where 表一.学号=表二.学号;

那么结果将会是 :学号 语文成绩 数学成绩
2 80 60

如果我想要结果:学号 语文成绩 数学成绩
1 90 0
2 80 60
3 0 70
(即不存在某门成绩时用0代替.)
问:sql语句该怎么写呢?
我的设计思路是:
扩充表一:
学号 语文成绩 数学成绩
1 90 0
2 80 0
扩充表二:
学号 语文成绩 数学成绩
2 0 70
3 0 60
再把表二insert到表一里,得到新表。
最后在select 学号,sum(语文成绩),sum(数学成绩) from ……
lxcwh09,请问在程序里如何判断,请说一下你的设计思路,大家探讨一下。

不好意思,我研究了一早上竟然解决了你这样问题,不过sql语句有点长,呵呵
如下设
表一:xx
表二:yy
语文:aa
数学:bb
学号:id
那麽通过如下方式可以得到你想要的
select id,aa,0 as bb from xx where id not in (select xx.id from xx inner join yy on xx.id=yy.id)
UNION
select id,0 as aa,bb from yy where id not in ( select xx. id from xx inner join yy on xx.id=yy.id)
UNION
select xx.id as id,aa,bb from xx inner join yy on xx.id=yy.id
思路,通过两个三个表组合起来,
第一二两表为排除在两表中都有学号的表,自动把其没有的那一门设为0,
表三为两都中都有学号的表
三表联合得出一表,呵呵,自我觉得很高明哦

实现不了.
在表一中,根本没有表二中的学号,
执行'select 表一.学号,表一.语文成绩,表二.数学成绩 from 表一,表二'后,也只能出现表一中的学号.
还有,我想,也没有这么来设计表的.
--------------------------------
楼下的答案很难使用..
嵌套子查询已经降低了查询的准备效率,更何况是联合+嵌套.
这样设计,对于服务器来说,是灾难.

试试这句..

select isnull(a.学号,b.学号) as 学号,
isnull(a.语文成绩,0) as 语文成绩,
isnull(b.数字成绩,0) as 数字成绩
from 表一 a full join 表二 b on a.学号=b.学号