在 SQL Server 中合理的使用 LEFT OUTER JOIN 進行開發!

比如我們想對某人的消費項目進行彙總,對應以下兩個表:Theme 與 ThemeDetail

Theme 的記錄爲:
ThemeID(int)    ThemeName(varchar[10])
        1                        就餐
        2                        出差
        3                        乘車
        4                        其它

ThemeDetail 的記錄爲:
DetailID(int)    ThemeID(int)    Price(money)
       1                    1                 12.5
       2                    1                    5
       3                    1                    6
       4                    2                   11
       5                    2                   17
       6                    3                    8

其中 Theme 中的 ThemeID 與 ThemeDetail 中的 ThemeID 是一對多的關係,對 ThemeDetail 表的理解如下:“就餐”費用爲 12.5 + 5 + 6 = 23.5 元,“出差”費用爲 11 + 17 = 28 元,“乘車”費用爲 8 = 8 元,“其它”費用不存在,視爲 0 處理,對應的 SQL 語句可以這樣表示:

SELECT TOP 100 PERCENT dbo.Theme.ThemeName, ISNULL(SUM(dbo.ThemeDetail.Price), 0)
      AS TotalPrice
FROM dbo.Theme INNER JOIN
      dbo.ThemeDetail ON dbo.Theme.ThemeID = dbo.ThemeDetail.ThemeID
GROUP BY dbo.Theme.ThemeName, dbo.Theme.ThemeID
ORDER BY dbo.Theme.ThemeID

執行結果如下:
ThemeName    TotalPrice
    就餐              23.5
    出差               28
    乘車                8

對於消費記錄不存的記錄如果就這樣不顯示它的話,使用內聯的方法就可以滿足要求了,但是我們現在需要對 Theme 中的每一項均做統計,也包括“其它”項,於是我們應該採用另一種方法來實現,這就是左外聯的方法,相應的 SQL 語句可以這樣表示:

SELECT TOP 100 PERCENT dbo.Theme.ThemeName, ISNULL(SUM(dbo.ThemeDetail.Price), 0)
      AS TotalPrice
FROM dbo.Theme LEFT OUTER JOIN
      dbo.ThemeDetail ON dbo.Theme.ThemeID = dbo.ThemeDetail.ThemeID
GROUP BY dbo.Theme.ThemeName, dbo.Theme.ThemeID
ORDER BY dbo.Theme.ThemeID

執行結果如下:
ThemeName    TotalPrice
    就餐              23.5
    出差               28
    乘車                8
    其它                0

這樣是不是就滿足了我們的要求呢!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章