sql 中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的效率要低一些,我沒有足夠的數據量來測試,不過我也相信是如此的。
轉載于:https://www.cnblogs.com/shuaishuaiguo/p/6378705.html
總結
以上是生活随笔為你收集整理的sql 中on和where的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: getDate()返回日期不一致问题引发
- 下一篇: DM6446开发攻略:V4L2视频驱动和