當我們在多表連接查詢時,相信有大部分的程序員,還是不清楚何時使用內鏈接,何時使用外連接!現在我來總結一下我個人的經驗!
比如有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