解析sql語句中left_join、inner_join中的on與where的差別。本站提示廣大學習愛好者:(解析sql語句中left_join、inner_join中的on與where的差別)文章只能為提供參考,不一定能成為您想要的結果。以下是解析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的效力要低一些,我沒有足夠的數據量來測試,不外我也信任是如斯的。