Oracle 中left join on and 和left join on where 的执行顺序

表1 tab1: 
id size 
1 10 
2 20 
3 30 
表2 tab2: 
size name 
10 AAA 
20 BBB 
20 CCCorm

select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name='AAA') form

一、中间表 
on条件: 
tab1.size = tab2.size and tab2.name='AAA' 
(条件不为真也会返回左表中的记录) 
tab1.id tab1.size tab2.size tab2.name 
1 10 10 AAA 
2 20 (null) (null) 
3 30 (null) (null) select

执行过程是:总共只有一个中间表,在这个中间表中,他会判断 tab1.size=tab2.size,而且过滤tab2.name="AAA";tab

select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name='AAA' join

一、中间表 
on条件: 
tab1.size = tab2.size 
tab1.id tab1.size tab2.size tab2.name 
1 10 10 AAA 
2 20 20 BBB 
2 20 20 CCC 
3 30 (null) (null) 
二、再对中间表过滤 
where 条件: 
tab2.name='AAA' 
tab1.id tab1.size tab2.size tab2.name 
1 10 10 AAAab

相关文章
相关标签/搜索