1. 程式人生 > >連表查詢都用Left Join吧

連表查詢都用Left Join吧

簡單 不知道 效率 行記錄 我們 主體 left 註意 說明

最近看同事的代碼,SQL連表查詢的時候很多時候用的是Inner Join,而我覺得對我們的業務而言,99.9%都應該使用Left Join(還有0.1%我不知道在哪),我用最簡單的方式來描述這兩者的區別,直接看圖(有點草啊):

技術分享圖片

我的做法是永遠把查詢主體放在左邊,然後右邊挨個連上要附加的信息,有則連上,沒有則留null,這樣思路是最清晰的。

Inner Join跟這個的區別是如果附加表找不到對應ID,那麽這行記錄就不會出現,我在圖中用紅色字體說明了這個區別。(各種Join的方式沒有任何性能上的差別,只有功能上的差別)

另外一定一定要註意這幾點:

  1. extra id這樣的字段一定要指向附加表的主鍵。這並非SQL技術上的要求,而是我們業務邏輯的要求,如果指向的附加表的extra id不唯一,那極有可能帶來你不想要的結果(通常是大量的重復),邏輯上也很難描述了。
  2. 如果附加表的extra id沒有索引,將大大影響連表的效率。
  3. 如果想確保一定能帶出附加信息,可以使用非空約束和外鍵約束。

我就簡單這麽定了:一定使用Left Join(除非你明確知道自己想要的是Inner Join),連表的列一定是指向另一張表的主鍵的。

連表查詢都用Left Join吧