left join inner 使用细节

很多开发人员自己也不知道条件写在 on里面 和写在where里面有什么区别.

我后来总结的结论是:

1. 做关联时候,on里面写两个表能够有外键关系的所有字段,有多个字段则用and连接一起写上,如果少一个,则会产生2倍的数据量,如果少2,则会产生四倍 的数据量,以此类推,而且最要命的问题是多产生出的这些数据没有任何作用而且全是干扰数据,会在我们的程序上滋生很多问题,例如在程序里面你认为经过查询 之后符合条件的数据只会有一笔,所以你一直是用datatable1.rows(0)(0)这样给画面字段塞值的,可是发现有时候对有时候不对(第一次新 增时候是对的,以后修改后再查询又是错的).这就是因为多出来的数据导致了这个问题.
2.
对于特使情况下,on 里面可以写入从表的条件,这样在筛选资料时候,就要求以主表为主,查出所有符合主表的数据,如果从表不满足这个条件,则显示null,如果从表的条件写在where里面,则要求筛选时候要同时满足主表和从表的条件,而不能用null表示.示例如下面的两个SQL:

SELECT A.vv,B.testid,B.testname FROM A left join B ON A.vv = B.testid and  B.testname ='john'

SELECT A.vv,B.testid,B.testname FROM A left join B ON A.vv = B.testid WHERE B.testname ='john'

 具体应该用哪一个,大家根据预想的查询结果选择.

3.

另外有一点是:left join ,inner join from a,b
的应用场合:left join 用在大多数场合,如果你是要讲主表中 符合条件(where 主表.字段 = ' 中国') 的资料都查出来,那么就用它.
inner join 则是说如果你要查询的数据有严格的条件限制,即要求主表完全满足又要求子表完全满足,而且不能在子表中用null的形式搪塞,那么就用inner join .
最后一个是我们原来在书本中的知识了,功能和inner join 是一模一样的,估计是是因为考虑到from 这样的形式不够清晰吧.

早上刚刚上班就说了这么多,话是不是太多了 ,呵呵,有任何不对的地方希望大家都提出来.我们共同探讨.

原文地址:https://www.cnblogs.com/pengyou8696/p/1493088.html