4月28日(火)3コマ目

今日、やったこと

  • [練習問題]いろいろな結合
  • [練習問題 解説]いろいろな結合

今日のホワイトボード

[練習問題 解説]いろいろな結合

正解例をあげておきます。

問1

図 問1 正解例

xx月中の条件は下図のように何種類か書き方があるが、月末が年、月で変わるため、翌月1日未満が便利(だと思う)。
図 条件「xx月中」

問2

問1からテーブル数が増えた。
図 問2 正解例

問3

1件の売上に対して、
  • 伝票番号
  • 処理日
  • 顧客
  • 担当者
は1対1の関係になる。
よって、伝票番号列だけでグループ化しても、伝票番号列、処理日列、顧客名列、担当者名列の組み合わせでグループ化しても、できるグループは同じ。
図 問3 正解例

問4

売上利益はグループ毎の値。よって、「売上利益が50000以上」はグループに対する条件。

select句でsum(数量*(卸単価 - 仕入単価))に別名”売上利益”を設定している。
売上利益は
  • グループに対する条件(having句)
  • 並び替え(order by句)
で使われている。
select句で指定した別名はorder by句では利用可だが、having句では利用できない。

order by句で別名”売上利益”を使うと
図 問4 正解例(select句の別名はorder by句でも使える)

having句で別名”売上利益”を使うと
図 問4 having句ではselect句の別名は使えない

問5

自己結合。
図 問6 正解例

以下はテーブルの別名に対して、テーブルの使われ方が一致しない
テストでは×にします
図 問6 テーブルの別名と使われ方が一致しない => ダメ

上司がいない人(MGR_ID列がnull => 上司テーブルに結合できる行がない)も出力するなら、外部結合。
部下テーブルを全行出力させる。
図 問5 上司がいない人も出力したい => 外部結合

問6

売上のない商品 = 売上データテーブルに登場しない。
結合相手がないデータも出力するには、外部結合。

〇left join
図 問6 正解例 left join版

〇right join
図 問6 正解例 rightjoin版

問7

あまり何も考えずにやってみると以下のようなかんじ。
図 なにも考えずにやってみると
商品数は10だが、検索結果は10行ではない。

ダメな理由をSQLの処理順に従って考える。

①結合
外部結合で商品マスタを全行出力する。
図 ①結合
これは問題ない。
ちなみに、”4月中に売り上げがあった”を無視して、商品別売上数量を取得すると以下のとおり。
図 結合後、商品でグループ化して売上数量を集計
”4月中に売り上げがあった”がなければこれでいい。

②4月中に絞り込み
図 where句で処理日が4月中を追加すると

ここで4月に売り上げのなかった商品は出力されなくなる。
図 ダメな理由

解決策
下図のように 商品マスタテーブル と 売上データテーブルの4月中の行 を結合すればいい。
図 解決策
以下のような結合条件になる。
図 商品マスタテーブルの全行と売上データテーブルの4月中の行を結合

これを商品でグループ化して、数量を集計すればいい。
図 問7 正解例

次回は

テストをします。
テストのあとはCASE。

このブログの人気の投稿

4月24日(金)3コマ目

4月17日(金)3コマ目