oracle的left join中on和where的區別
1,說明:
oracle資料庫在通過連線兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給使用者。
在使用leftjion時,on和where條件的區別如下:
(1)、 on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。
(2)、where條件是在臨時表生成好後,再對臨時表進行過濾的條件。這時已經沒有left join的含義(必須返回左邊表的記錄)了,條件不為真的就全部過濾掉。
2,例子:
假設有兩張表:
表1tab1:
id size
1 10
2 20
3 30
表2tab2:
size name
10 aaa
20 bbb
20 ccc
兩條sql:
1、select * form tab1 leftjoin tab2 on (tab1.size = tab2.size) where tab2.name=』aaa』
2、select * form tab1 leftjoin tab2 on (tab1.size = tab2.size and tab2.name=』aaa』)
第一條sql的過程:
1、中間表
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)
2、再對中間表過濾
where 條件:
tab2.name=』aaa』
tab1.id tab1.size tab2.size tab2.name
1 10 10 aaa
第二條sql的過程:
1、中間表
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)
其實以上結果的關鍵原因就是left join,right join,full join的特殊性,不管on上的條件是否為真都會返回left或right表中的記錄,full則具有left和right的特性的並集。 而innerjion沒這個特殊性,則條件放在on中和where中,返回的結果集是相同的。
SQL SERVER資料庫Left Join用法
left join基本語法 left join 關鍵字會從左表 table name1 那裡返回所有的行,即使在右表 table name2 中沒有匹配的行。select column name s from table name1 left join table name2 on table na...
Oracle資料庫 Left Join 使用之我見
在oracle 9i資料庫中使用left join這種連表查詢方式的效率是極為低下的。在專案中使用了這麼一條語句 select tmp2.company name,sum tmp2.radio send bytes tmp2.radio recv bytes 1024 1024 1024 as fl...
資料庫多個left join如何執行
select from a left join b on a.abid b.baid left join c on c.cbid b.bcid 順序是先a,b組合成乙個虛擬表,然後虛擬表再和c表關聯 a表先和b表left join 生成虛擬表 假設為t1 是t1直接和c left join 測試資料...