当我们在多表连接查询时,相信有大部分的程序员,还是不清楚何时使用内链接,何时使用外连接!现在我来总结一下我个人的经验!
比如有tableA ,tableB,tableA和tableB是一对多
需求一:根据tableB的某写字段,查询出tableA
分析:如果此时使用内链接 则相应的语句是:select a.* from tableA a ,tableB b where a.id =tableB.aid and b.code='4401'
此时返回的结果是tableA在tableB有子数据的的部分数据,而如果表tableA中的某条数据,在表tableB中不存在子数据,此时是查询不出来!
如果使用的是外连接,则相应的语句如下:select a.* from tableA a left join tableB b on a.id=b.aid and b.code='4401';
此时返回的结果是tableA中的全部数据,而且有重复数出现,则应该用distinct过滤,语句如下:
:select distinct a.* from tableA a left join tableB b on a.id=b.aid and b.code='4401';
总结:1:如果查询要返回的是一的一方,而且需要返回全部的数据,则应该用外连接,此时内链接不合适。
2:如果查询要返回的是一的一方,而且只想返回在多的一方存在记录的数据,则使用屋内连接。
需求二:根据tableB的某写字段,查询出tableB