平成26年度 春期 データベーススペシャリスト試験 午後Ⅰ
http://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2014h26_1/2014h26h_db_pm1_qs.pdf
問3 テーブルの設計及びSQLの設計に関する次の記述を読んで,設問1~3に答えよ。
設問2 〔SQL分の設計〕について,(1)~(3)に答えよ。
(1) SQL2及びSQL3の実行結果をSQL1と同じにしたい。 f , g に入れる適切な字句を,
1語又は2語で答えよ。結果行の並び順は異なってよい。
問題の対象となっているのは、以下の内容である。
〔SQL文の設計〕
Fさんが,案1と案2のそれぞれについて設計した主なSQL文を表4に示す。
注記 hvは,ホスト変数を表す。
SQL1を見ると、実行結果は、特定の注文番号に紐づく、商品(セット商品と単品商品の混在)
から、社内原価と化粧箱番号を出力しているものである。
2つの表の表結合を商品番号を使って行っているが、これは両テーブルに同じ商品番号が
存在する行を対象としている。
SQL2は、3つの表の結合である。JOIN と ON 句が「両テーブルに存在する」という
条件に合わせるために、INNER JOINということになる。
SQL3は、2つのSQLの結果の和で、それぞれのSQLは、2つの表の結合である。
使われているCAST関数は、正直初めてだったので、分からないが、C言語やJavaの
キャストから、型変換の役割であることを推定し、UNION ALLでは、同じ列のデータは、
全て同じ型でなくてはならないための指定であると、想定する。
【回答】
f : INNER
g : INNER
http://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2014h26_1/2014h26h_db_pm1_qs.pdf
問3 テーブルの設計及びSQLの設計に関する次の記述を読んで,設問1~3に答えよ。
設問2 〔SQL分の設計〕について,(1)~(3)に答えよ。
(1) SQL2及びSQL3の実行結果をSQL1と同じにしたい。 f , g に入れる適切な字句を,
1語又は2語で答えよ。結果行の並び順は異なってよい。
問題の対象となっているのは、以下の内容である。
〔SQL文の設計〕
Fさんが,案1と案2のそれぞれについて設計した主なSQL文を表4に示す。
表4 案1と案2について設計した主なSQL文(未完成)
案
| SQL | SQL文 |
---|---|---|
案1 | SQL1 | SELECT M.商品番号,P.社内原価,P.化粧箱番号 FROM 注文明細 M,商品 P WHERE M.商品番号 = P.商品番号 AND M.注文番号 = :hv |
案2 | SQL2 | SELECT M.商品番号,T.社内原価,S.化粧箱番号 FROM 注文明細 M f JOIN 単品商品 T ON M.商品番号 = T.商品番号 f JOIN セット商品 S ON M.商品番号 = S.商品番号 |
案2 | SQL3 | SELECT M.商品番号,T.社内原価,CAST(NULL AS INT) 化粧箱番号 FROM 注文明細 M g JOIN 単品商品 T ON M.商品番号 = T.商品番号 WHERE M.注文番号 = :hv UNION ALL SELECT M.商品番号,CAST(NULL AS INT) 社内原価,S.化粧箱番号 FROM 注文明細 M g JOIN セット商品 S ON M.商品番号 = S.商品番号 WHERE M.注文番号 = :hv |
案1 | SQL4 | SELECT K.単品.商品番号,SUM( h )
FROM 注文明細 M,商品 P,セット商品構成 K
WHERE M.注文番号 = :hv AND M.商品番号 = P.商品番号
AND P.商品番号 = K.セット商品番号
GROUP BY K.単品商品番号
|
案2 | SQL5 | SELECT K.単品.商品番号,SUM( h )
FROM 注文明細 M,セット商品 S,セット商品構成 K
WHERE M.注文番号 = :hv AND M.商品番号 = S.商品番号
AND P.商品番号 = K.セット商品番号
GROUP BY K.単品商品番号
|
SQL1を見ると、実行結果は、特定の注文番号に紐づく、商品(セット商品と単品商品の混在)
から、社内原価と化粧箱番号を出力しているものである。
2つの表の表結合を商品番号を使って行っているが、これは両テーブルに同じ商品番号が
存在する行を対象としている。
SQL2は、3つの表の結合である。JOIN と ON 句が「両テーブルに存在する」という
条件に合わせるために、INNER JOINということになる。
SQL3は、2つのSQLの結果の和で、それぞれのSQLは、2つの表の結合である。
使われているCAST関数は、正直初めてだったので、分からないが、C言語やJavaの
キャストから、型変換の役割であることを推定し、UNION ALLでは、同じ列のデータは、
全て同じ型でなくてはならないための指定であると、想定する。
参考 DB2小ネタ - DB2ではNULLをSELECTに単純には置けない表の結合条件としては、両方に存在する値であること。
【回答】
f : INNER
g : INNER
コメント
コメントを投稿