2010年8月23日 星期一

SQL語法探討:關於left/right join和inner join

其實以前一直無法理解left/right join的存在理由

以資料準確性和資源利用率來說,inner join或者說 select * from table where id=‘id’比起left好多了

不過這幾天經過學長的開導,發現了left join之類的存在理由

簡單來說,資料完整性

如果我們有一個訂單table_order,裡面有連結到客戶資料表table_cus的id_cust

使用inner join時,當id_cust在table_cust中不存在時,該資料就無法被選擇到

如 select a.order, b.name_cust from table order a , table_cust b where a.id_cust=b.id_cust where a.date between ‘2010/1/1’ and ‘2010/2/1’

這會造成資料的缺失,

簡單來說就是本來有100筆資料

但是其中10筆的id_cust在table_cust中不存在時

select結果就只有90筆

這種結果的問題非常大

如果放在別的情境中,當客戶發現這些資料不全時就會質問開發者

開發者需要從頭追蹤才能取得完整資訊

學長的說法是與其這樣,不如使用left join取得全部資料

之後再來處理對應的資料缺失問題

例如顯示客戶資料不存在並提示新增客戶資料之類

這個理由非常的能夠說服人

難怪有人說剛從學校畢業都用inner join

不過業界兩三年後就都用left join了 XD

沒有留言: