平成29年 春期 データベーススペシャリスト 午前II 問10

ある月の“月末商品在庫”表と“当月商品出荷実績”表を使って、ビュー“商品別出荷実績”を定義した。
このビューにSQL文を実行した結果の値はどれか。

月末商品在庫
商品コード 商品名 在庫数
S001 A 100
S002 B 250
S003 C 300
S004 D 450
S005 E 200
当月商品出荷実績
商品コード 商品出荷日 出荷数
S001 2017-03-01 50
S003 2017-03-05 150
S001 2017-03-10 100
S005 2017-03-15 100
S005 2017-03-20 250
S003 2012-03-25 150

[ビュー“商品別出荷実績”の定義]
   CREATE VIEW 商品出荷実績(商品コード, 出荷実績数, 月末在庫)
      AS SELECT 月末商品在庫.商品コード, SUM(出荷数), 在庫数
         FROM 月末商品在庫 LEFT OUTER JOIN 当月商品出荷実績
         ON 月末商品在庫.商品コード = 当月商品出荷実績.商品コード
            GROUP BY 月末商品在庫.商品コード, 在庫数

[SQL文]
   SELECT SUM(月末在庫数) AS 出荷商品在庫合計
      FROM 商品別出荷実績 WHERE 出荷実績数 <= 300

 ア  400  イ  500  ウ  600  エ  700


答え ア


解説
ビュー“商品別出荷実績”の定義からビュー“商品別出荷実績”を求めると、これは各商品コードの出荷数の合計を求める内容になっているので

商品別出荷実績
商品コード 出荷実績数 月末在庫数
S001 150 100
S002
250
S003 300 300
S004
450
S005 350 200
になります。この時、当月商品出荷実績のない商品コードS002とS004も“LEFT OUTER JOIN”で処理されますが、出荷実績数は0ではなく“NULL”になります。
次に問題のSQL文は上のビューから出荷実績数が300以下の商品の月末在庫数の合計を求めるのですが、ここで、商品コードS002とS004は出荷実績数が“NULL”なので、出荷実績数が300以下の条件の対象にはならず、商品コードS001とS003が対象となり、結果は400(ア)になります。


キーワード
・外部結合

キーワードの解説
  • 外部結合(OUTER JOIN)
    SQL文として
       FROM 表1 LEFT OUTER JOIN 表2
          ON (表1.列A = 表2.列B)
    と指定した場合、表1の列Aにしかないデータも検索されます。
       FROM 表1 RIGHT OUTER JOIN 表2
          ON (表1.列A = 表2.列B)
    と指定した場合、表2の列Bにしかないデータも検索されます。

もっと、「OUTER JOIN」について調べてみよう。

戻る 一覧へ 次へ