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

相關文章
相關標籤/搜索