sql 中on和where的區別

2022-07-19 15:09:21 字數 1675 閱讀 2758

table a(id, type):

id     type 

1      1         

2      1          

3      2         

table b(id, class):

id    class 

1      1

2      2

sql語句1:select a.*, b.* from a left join b on a.id = b.id and a.type = 1;

sql語句2:select a.*, b.* from a left join b on a.id = b.id where a.type = 1;

sql語句3:select a.*, b.* from a left join b on a.id = b.id and b.class = 1;

sql語句1的執行結果為:

a.id    a.type    b.id    b.class

1        1            1        1

2        1            2        2

3        2               

sql語句2的執行結果為:

a.id    a.type    b.id    b.class

1        1            1        1

2        1            2        2

sql語句3的執行結果為:

a.id    a.type    b.id    b.class

1        1            1        1

2        1            

3        2            

由sql語句1可見,left join 中左表的全部記錄將全部被查詢顯示,on 後面的條件對它不起作用,除非再後面再加上where來進行篩選,這就是sql語句2了;由sql語句3可見,on後面的條件中,右表的限制條件將會起作用。

sql語句4:select a.*, b.* from a inner join b on a.id = b.id and a.type = 1;

sql語句5:select a.*, b.* from a inner join b on a.id = b.id where a.type = 1;

sql語句6:select a.*, b.* from a, b where a.id = b.id and a.type = 1;

sql語句7:select a.*, b.* from a, b where a.type = 1 and a.id = b.id;

這四條語句的執行結果一樣,如下:

a.id    a.type    b.id    b.class

1        1            1        1

2        1            2        2

由此可見,inner join 中on後面的限制條件將全部起作用,這與where的執行結果是一樣的。另外,where語句與inner join確實能得到相同的結果,只是效率不同(這個我沒有測試過,不過我相信這個結論)。

但是sql語句6是否比sql語句7的效率要低一些,我沒有足夠的資料量來測試,不過我也相信是如此的。

SQL中ON和WHERE的區別

一直覺得自己sql不熟練,於是開始刷sql題,發現了不懂sql中on和where的區別,搜尋結果網上幾十幾十篇的部落格互相抄 關鍵抄得還很迷惑。好在最後還是弄懂了。1.首先on是用在連線join中的,它的意思是在生成連線結果的時候 偏心地 剔除掉一些不符合條件的 至於怎麼偏心,比如在left joi...

sql中on和where的區別

資料庫在通過連線兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給使用者。在使用left jion時,on和where條件的區別如下 1 on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。2 where條件是在臨時表生成好後,再對臨時表...

SQL中on和where的區別

這篇部落格參考了網上的,具體哪一篇是原稿,不知道,特此宣告。資料庫在通過連線兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給使用者。下面以使用left jion時,on和where條件的區別如下 1 on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回...