西沙璞玉
          愛不容易
          posts - 0,comments - 4,trackbacks - 0
          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的效率要低一些,我沒有足夠的數據量來測試,不過我也相信是如此的。

          posted on 2012-03-13 10:32 @趙 閱讀(152) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          哥哥最近不是很忙
          主站蜘蛛池模板: 理塘县| 安塞县| 赤峰市| 平南县| 清丰县| 尚志市| 贡嘎县| 疏附县| 霍邱县| 罗江县| 昌宁县| 衢州市| 诸城市| 思茅市| 铜梁县| 桑植县| 改则县| 德钦县| 南投市| 陇西县| 黔西| 民勤县| 通江县| 新田县| 全椒县| 镇赉县| 平陆县| 墨脱县| 闸北区| 吉安县| 容城县| 海丰县| 武安市| 洪江市| 壶关县| 阳新县| 洱源县| 宝坻区| 阳西县| 秭归县| 黄冈市|