1.在內連線即inner join中沒有區別,
2.在使用left jion時,on和where條件的區別如下:
1、on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。
2、where條件是在臨時表生成好後,再對臨時表進行過濾的條件。這時已經沒有left
join的含義(必須返回左邊表的記錄)了,條件不為真的就全部過濾掉。
假設有兩張表:
表1 tab1:
id size
1 10
2 20
3 30
表2 tab2:
size name
10 aaa
20 bbb
20 ccc
兩條sql:
1、select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name='aaa'
2、select * form tab1 left join 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的特性的並集。 而inner jion沒這個特殊性,則條件放在on中和where中,返回的結果集是相同的。
oracle中where條件中型別的隱式轉換
sql的where條件中,等式兩邊型別不一致時,資料庫會做一次隱式型別轉換。如果是數字型別 諸如number,double,integer等 的話,會預設的把帶引號的轉成數字再進行查詢,也就是說帶引號和不帶引號是一樣的。select from t where to number char col n...
linux基礎命令where和whereis
目的 查詢命令或應用程式的所在位置 格式 which 命令名 應用程式名 我們在終端的命令列上執行pwd,實際上是去執行了 bin pwd應用程式 我們一起來使用一下看看 which pwd 定位到 bin pwd book www.100ask.org linux dira which pwd b...
left join 中on和where的講解
select from table1 left join table2 on table1.id table2.id where table2.name name left join on 首先是以左表為主表去連線右表生成乙個中間表 然後再有where 語句到生成的中間表中去查詢符合where條件的...