資料庫在通過連線兩張或者多張表返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給使用者
在使用inner join(內連線)沒有區別,但是 在使用left jion時,on和where條件的區別如下:
1、 on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。(返回左表全部記錄)。此時可能會出現與右表不匹配的記錄即為空的記錄。
2、where條件是在臨時表生成好後,再對臨時表進行過濾的條件。
假設有兩張表:表1:tab1id
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』)
3、select * from tab1 left join tab2 on (tab1.size = tab2.size and tab2.name='aaa') where tab2.id is not null;
2和3是等價的。只是2中包含了不匹配的結果所有與1不等價。
第一條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』
(條件不為真也會返回左表中的記錄)
SQL中 where 與on 的區別
資料庫在通過連線兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給使用者。在使用left jion時,on和where條件的區別如下 1 on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。2 where條件是在臨時表生成好後,再對臨時表...
SQL中on條件與where條件的區別
資料庫在通過連線兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給使用者。在使用left jion時,on和where條件的區別如下 1 on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。2 where條件是在臨時表生成好後,再對臨時表...
SQL 中 on 條件與 where 條件的區別
資料庫在通過連線兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給使用者。在使用left join時,on和where條件的區別如下 1 on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。2 where 條件是在臨時表生成好後,再對臨時...