データベーススペシャリスト 平成24年春期 午前U 問9

午前U 問9

ある月の"月末商品在庫"表と"当月商品出荷実績"表を使って,ビュー"商品別出荷実績"を定義した。このビューにSQL文を実行した結果の値はどれか。
09_1.gif/image-size:463×161
09_2.gif/image-size:452×230
  • [この問題の出題歴]
  • データベース H29春期 問10

分類

テクノロジ系 » データベース » データ操作

正解

解説

最初に設問の定義により導出されるビュー"商品別出荷実績"の構成を考えていきます。

まずSQL文の下記部分では、各表の商品コードを結合キーとして左外部結合を指示しています。
FROM 月末商品在庫 LEFT OUTER JOIN 当月商品出荷実績
ON 月末商品在庫.商品コード = 当月商品出荷実績.商品コード
左外部結合とは、基準となる左表の行を全て抽出し、右表からは左表の行と自然結合できる行のみを抽出する結合です。左表の行と結合する行が右表に無い場合は右表の列の値をNULLとして結合します。したがって上記のSQLで生成される中間表は下図の左表のようになります。
09_3.gif/image-size:533×181
さらにGROUP BY句で、商品コード、在庫数ごとにグループ化すると以下のようになります。
09_4.gif/image-size:280×166
ここからSELECT文で商品コード、SUM(出荷数)、在庫数を抜き出したものがビュー"商品別出荷実績"です。
09_5.gif/image-size:196×129
ビューに対するSQL文は、ビューの行のうち出荷実績数が300以下のレコードを抽出し、その月末在庫数の合計を表示するものです。NULL値は「IS NULL演算子」か「IN NOT NULL演算子」でしか比較ができないため、ビュー"商品別出荷実績"のうちWHERE句が真を返すのは商品コードS001とS003の2行だけになります。S001とS003の月末在庫数は、それぞれ100,300なので、SUM()は2つの値を足し合わせた400を返します。

以上より「ア」が正解です。
© 2016-2019 データベーススペシャリストドットコム All Rights Reserved.

Pagetop