Leftjoin限制条件放置位置不一样,造成的结果差异非常大
废话不多说,先初始化
create table t1 as select * from scott.emp;
create table t2 as select * from scott.dept;
delete t2 where deptno=30;
create table tab1(id varchar2(100),size1 varchar2(100));
create table tab2( size1 varchar2(100),name varchar2(200));
truncate table tab1;
truncate table tab2;
insert into tab1 (ID, SIZE1)
values ('1', '10');
insert into tab1 (ID, SIZE1)
values ('2', '20');
insert into tab1 (ID, SIZE1)
values ('3', '30');
insert into tab2 (SIZE1, NAME)
values ('10', 'AAA');
insert into tab2 (SIZE1, NAME)
values ('20', 'BBB');
insert into tab2 (SIZE1, NAME)
values ('20', 'CCC');
select * from tab1 ;
select * from tab2 ;
--sql1 简单的left join 因为tab2有2条size=20的,所以会关联出4条记录
select tab1.*, tab2.*
from tab1
left join tab2
on (tab1.size1 = tab2.size1);
--sql2 对左表的非连接字段限制条件放在on里面,结果tab1的记录并没有被限制掉,只是关联tab2的时候,条件起了作用,
--顺序可以理解为先关联出了4条记录,后限制tab2只显示符合条件的记录
select tab1.*, tab2.*
from tab1
left join tab2
on (tab1.size1 = tab2.size1 and tab1.id = 2);