分类: Oracle
2008-08-07 14:20:45
表aa:
A B C
10 5
11 6
12 6
13
表bb:
A B C
11 6
12 7
select * from aa,bb where aa.a=bb.a(+)
select * from aa left join bb on aa.a=bb.a
A B C A B C
10 5
11 6 11 6
12 6 12 7
13
以上两种写法结果集一样
select * from aa,bb where aa.a=bb.a(+) and aa.c=5
select * from aa left join bb on aa.a=bb.a where aa.c=5
A B C A B C
10 5
以上两种写法结果集一样,尽管使用了左外连接,但是where条件会把左外连接返回的结果集进行相应的过滤
select * from aa,bb where aa.a=bb.a(+) and bb.c=7
select * from aa left join bb on aa.a=bb.a where bb.c=7
A B C A B C
12 6 12 7
以上两种写法结果集一样,尽管使用了左外连接,但是where条件会把左外连接返回的结果集进行相应的过滤
select * from aa,bb where aa.a=bb.a(+) and aa.c=bb.c
select * from aa left join bb on aa.a=bb.a where aa.c=bb.c
A B C A B C
11 6 11 6
以上两种写法结果集一样,尽管使用了左外连接,但是where条件会把左外连接返回的结果集进行相应的过滤
select * from aa,bb where aa.a=bb.a(+) and aa.c=bb.c(+)
select * from aa left join bb on aa.a=bb.a and aa.c=bb.c
A B C A B C
10 5
11 6 11 6
12 6
13
假如使用(+)做左外连接,必须在where的两个条件里面都加上(+)
select * from aa left join bb on aa.a=bb.a and aa.c=5
A B C A B C
10 5
11 6
12 6
13
select * from aa left join bb on aa.a=bb.a and bb.c=7
select * from aa,bb where aa.a=bb.a(+) and bb.c(+)=7
A B C A B C
10 5
11 6
12 6 12 7
13
再次印证了结果集包含aa所有的记录,只包含bb中符合条件的记录
select * from aa left join bb on aa.a=bb.a and aa.c=bb.c
A B C A B C
11 6 11 6
13
10 5
12 6
再次印证了结果集包含aa所有的记录,只包含bb中符合条件的记录
select * from aa,bb where aa.a=bb.a(+) and aa.c=5(+)
此种写法不对
select * from aa,bb where aa.a=bb.a(+) and aa.c(+)=5
A B C A B C
10 5
此种写法没有语法错误