Excelが大好きだ!

Excel大好き経理マンがExcelの事を書き綴っていきます。


スポンサードリンク

SQL基礎問題5:複数のマスタテーブルの結合

導入記事にある通りエクセルの神髄さんのSQL基礎問題にチャレンジしていきます。

www.excellovers.com

ExcelSQLを使う方法については上記の記事を参照してください。

お題


言語化

  1. テーブルT01とテーブルM01を商品IDをキーに結合
  2. テーブルM01とテーブルM02を分類IDをキーに結合
  3. 3つテーブルが結合されたテーブルを、分類ID・分類名事にグループ化

SQL

まずはテーブルT01とテーブルM01を左外部結合で結合します。
テーブルT01の購入情報に商品IDをキーとしてテーブルM01の商品情報が紐づけられます。

select
  * 
from
  ( 
    [Q5$A2:D7] as T01 
      left join [Q5$F2:H7] as M01 
        on T01.商品ID = M01.商品ID
  )


3つ以上のテーブルの結合条件

次に上記結合されたテーブルにさらにテーブルM02を同じく左外部結合で結合します。
結合キーはM01とM02の分類IDとします。

ここでは括弧の付け方に気をつける必要があります。
3つ以上のテーブルを結合する際には、括弧で囲む必要があります。

まず1つ目のテーブルと2つ目のテーブルの結合条件を記載して括弧で括ります。
次に先程の結合条件の後に3つ目のテーブルの結合条件を記載して、再度全体を括弧で括ります。
この順番で記載することで正しく括弧を付けることが可能です。

1回目の結合:(テーブル1 JOIN テーブル2)
2回目の結合:((テーブル1 JOIN テーブル2) JOIN テーブル3)
select
  * 
from
  ( 
    ( 
      [Q5$A2:D7] as T01 
        left join [Q5$F2:H7] as M01 
          on T01.商品ID = M01.商品ID
    ) 
      left join [Q5$J2:K6] as M02 
        on M01.分類ID = M02.分類ID
  )


M01 の分類IDと M02 の分類IDをキーに結合することで、3つ目のテーブルを結合することで各商品情報に商品の分類を紐づけることができました。

最後に分類IDと分類名でグループ化してそのグループの合計金額を算出します。

select
  M01.分類ID
  , 分類名
  , sum(数量 * 単価) as 金額 
from
  ( 
    ( 
      [Q5$A2:D7] as T01 
        left join [Q5$F2:H7] as M01 
          on T01.商品ID = M01.商品ID
    ) 
      left join [Q5$J2:K6] as M02 
        on M01.分類ID = M02.分類ID
  ) 
group by
  M01.分類ID
  , 分類名


まとめ

結合条件自体は最もシンプルな条件ですが、3つ以上のテーブルを結合する際の括弧の付け方がいつも悩むところでした。
今回のチャレンジで括弧の付け方をうまく言語化できた気がします。