sql中on與where的區別

2021-07-11 14:34:26 字數 1664 閱讀 9237



資料庫在通過連線兩張或者多張表返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給使用者

在使用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 條件是在臨時表生成好後,再對臨時...