/* Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 Connected as scott */ --下面是一个小实例: 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 小五 100 */
现在也一直能用由于(+)不是标准sql里的 所以如果移植到其他数据库可能就不行
我的前辈跟我说的时候也说 (+)理解起来不直观 统一用join代替了
不过你想用的话 也没问题
/*
Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.2.0
Connected as scott
*/
--下面是一个小实例:
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
小五 100
*/
而且从性能上没任何优势
可读性差、扩展性差
坚决抵制外连接用(+)对我们这些从标准sql学起的
又直接从9i、10g接触的,已习惯标准语法走入职场,却由于你们这些老手的习惯用(+)
我们新手们都得顺便理解这种旧语法