令和6年度春期 応用情報技術者試験 午前 問26

分野:データベース|実際に出題されたIPA過去問題

“部品”表及び“在庫”表に対し,SQL文を実行して結果を得た。SQL文のaに入れる字句はどれか。〔SQL文〕SELECT 部品.部品ID AS 部品ID, CASE WHEN 部品.発注点 > a THEN N'必要' ELSE N'不要' END AS 発注要否 FROM 部品 LEFT OUTER JOIN 在庫 ON 部品.部品ID = 在庫.部品ID GROUP BY 部品.部品ID, 部品.発注点

問題の図表(IPA公式問題冊子より引用)
図表:IPA公式問題冊子より
  1.  COALESCE(MIN(在庫.在庫数), 0)
  2.  COALESCE(MIN(在庫.在庫数), NULL)
  3.  COALESCE(SUM(在庫.在庫数), 0)
  4.  COALESCE(SUM(在庫.在庫数), NULL)
解答・解説を見る

正解:ウ

AI解説

発注要否の判定には、部品ごとの在庫数の合計と発注点を比較する必要がある。ただし在庫レコードが1件も無い部品はLEFT OUTER JOINの結果NULLになるため、COALESCE関数でNULLを0に置き換えたうえでSUM(在庫数)と発注点を比較する必要がある。これにより在庫切れの部品も正しく「必要」と判定できる。 ア: MIN(在庫.在庫数)は複数の在庫レコードがある場合に在庫数の最小値を返すだけであり、発注要否の判定に必要な在庫の合計数を表さないため誤りである。 イ: COALESCEの第二引数(在庫レコードが無い場合の代替値)をNULLにしても、NULLとの比較結果は常にUNKNOWN(不定)になり、発注点との大小比較が意図どおりに機能しないため誤りである。 ウ: 正しい。SUM(在庫.在庫数)で部品ごとの在庫数を合計し、在庫レコードが存在しない場合はCOALESCEで0として扱うことで、発注点との比較が在庫切れの部品も含めて正しく行える。 エ: SUM(在庫.在庫数)は正しいが、代替値をNULLにするとイと同様にNULLとの比較がUNKNOWNになり、在庫レコードが無い部品の発注要否が正しく判定されないため誤りである。 💡 LEFT OUTER JOINで結合される側にレコードが無い部品はNULLになる、という点と、集計関数はSUM(合計)であってMIN(最小)ではない点、そしてNULLとの比較は常にUNKNOWNになりCOALESCEでの0置換が必須である点、の3つを押さえておく。

出典:令和6年度 春期 応用情報技術者試験 午前 問26 / 独立行政法人情報処理推進機構(IPA)
※Web掲載用に表記を一部変更しています。図表はIPA公式問題冊子から引用しています。著作権はIPAに帰属します。
📱 演習アプリで解く(無料・登録不要・2,640問収録)

「データベース」分野の攻略ポイント

関係モデル・正規化・SQL・トランザクション管理・障害回復・データベース設計が中心です。計算問題は少なく、定義と手順を正確に覚えていれば確実に得点できる、いわば「取りこぼしてはいけない」分野です。特に正規形とACID特性は毎年のように形を変えて出ます。

データベースの攻略ポイントをすべて見る(要点5項目・ひっかけ3項目)→

同じ分野(データベース)の過去問