3张表:表a:
name score
冠希 20
阿娇 30
小三 20表b:
name score
冠希 40
阿娇 50
小四 70表c:
name score
冠希 100
阿娇 100
小五 100
3张表人员不一样,以表c的人员为准,求每个人分别在c、b中的score与a的score之差(如果c中的人员在a、b中不存在,则其在a、b中的scroe按0计算)。大侠们指教一下这个sql语句该怎么写~~我用的mysql
name score
冠希 20
阿娇 30
小三 20表b:
name score
冠希 40
阿娇 50
小四 70表c:
name score
冠希 100
阿娇 100
小五 100
3张表人员不一样,以表c的人员为准,求每个人分别在c、b中的score与a的score之差(如果c中的人员在a、b中不存在,则其在a、b中的scroe按0计算)。大侠们指教一下这个sql语句该怎么写~~我用的mysql
--不会mysql
select c.name,c.score-nvl(a.score),nvl(b.score)-nvl(a.score)
from a,b,c
where c.name=a.name(+) and c.name=b.name(+)
create table a(
name varchar2(10),
score int
);
create table b(
name varchar2(10),
score int
);
create table c(
name varchar2(10),
score int
);
--data:
insert into a(name,score) values('冠希',20);
insert into a(name,score) values('阿娇',30);
insert into a(name,score) values('小三',20);insert into b(name,score) values('冠希',40);
insert into b(name,score) values('阿娇',50);
insert into b(name,score) values('小四',70);insert into c(name,score) values('冠希',100);
insert into c(name,score) values('阿娇',100);
insert into c(name,score) values('小五',100);/*
3张表人员不一样,以表c的人员为准,
求每个人分别在c、b中的score与a的score之差,
如果c中的人员在a、b中不存在,则其在a、b中的scroe按0计算.
*/SQL> select c.name, c.score-nvl(a.score,0) as score
2 from c,a
3 where c.name=a.name(+)
4 union all
5 select c.name,c.score-nvl(b.score,0)
6 from c,b
7 where c.name=b.name(+);
/*
NAME SCORE
---------- ----------
冠希 80
阿娇 70
小五 100
冠希 60
阿娇 50
小五 1006 rows selected
*/
--union过滤掉了完全重复的行
--union all包含了完全重复的行
SQL> select c.name, c.score-nvl(a.score,0)
2 from c,a
3 where c.name=a.name(+)
4 union
5 select c.name,c.score-nvl(b.score,0)
6 from c,b
7 where c.name=b.name(+);
/*
NAME C.SCORE-NVL(A.SCORE,0)
---------- ----------------------
阿娇 50
阿娇 70
冠希 60
冠希 80
小五 100
*/
(name varchar2(20),
score number)
create table b
(name varchar2(20),
score number)
create table c
(name varchar2(20),
score number)
insert into a values('冠希',20);
insert into a values('阿娇',30);
insert into a values('小三',20);insert into b values('冠希',40);
insert into b values('阿娇',50);
insert into b values('小四',70);insert into c values('冠希',100);
insert into c values('阿娇',100);
insert into c values('小五',100);
select c.name name,(c.score-nvl(a.score,0)) "scorec-a",(c.score-nvl(b.score,0)) "scorec-b" from c c
left join a a on c.name = a.name
left join b b on c.name = b.name