程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 解析sql語句中left_join、inner_join中的on與where的區別

解析sql語句中left_join、inner_join中的on與where的區別

編輯:關於MYSQL數據庫
    以下是對在sql語句中left_join、inner_join中的on與where的區別進行了詳細的分析介紹,需要的朋友可以參考下  

    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的效率要低一些,我沒有足夠的數據量來測試,不過我也相信是如此的。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved