戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

ITパスポート 2015年 秋期 72


問題文

関係データベースで管理された“売上”表、“顧客”表及び“商品”表がある。a~cのうち、これらの表のデータを用いて作成できるものだけを全て挙げたものはどれか。ここで、下線のうち実線は主キーを、破線は外部キーを表す。
ITパスポート 2015年 秋期  問72の問題画像

選択肢

a, b
a, b, c
a, c(正解)
b, c

🔒 解説は解答すると表示されます

関係データベースの表から作成できる一覧の判定【ITパスポート 解説】

正解の理由

与えられた3つの表(売上、顧客、商品)で使える情報は次のとおりです。
  • 売上表:売上番号、顧客番号、商品番号、売上年月日、売上額(→「いつ」「誰が」「何を」「いくらで」買ったかが分かる)
  • 顧客表:顧客番号、顧客名(→顧客番号で顧客の名前が分かる)
  • 商品表:商品番号、商品カテゴリ名、商品名(→商品番号で商品名やカテゴリが分かる)
これらから、
  • 「過去のある期間に一定額以上の売上があった顧客の一覧」(a)は、売上表の売上年月日と売上額、顧客番号を使って集計すれば作れる。
  • 「直近1か月の商品別売上額ランキング」(c)は、売上表の売上年月日・売上額・商品番号を使って商品別に合計し順位付けすれば作れる。
    一方、「前月に在庫切れがあった商品の一覧」(b)は、在庫(何個残っているか)を示すデータがどの表にも存在しないため、元の3表だけでは判定できません。
    したがって作成できるものは a と c で、選択肢は になります。
(補足用語)
  • リレーショナルデータベース(関係データベース):表(テーブル)でデータを管理する方式。
  • 主キー(primary key):各行を一意に識別する列(例:売上番号)。
  • 外部キー(foreign key):別の表の主キーを参照する列(例:売上表の顧客番号は顧客表の顧客番号を参照)。

解法ステップ

  1. 各表にどんな列(項目)があるかを確認する。特に「日時」「数量・金額」「識別子(番号)」を探す。
  2. 問題で求められている一覧を、どの項目で作るかを考える。集計(合計)やフィルタ(日付範囲、閾値)で対応できるかを検討する。
  3. 必要な情報が全て既存の表の列で得られるなら作成可能。足りない情報(在庫数など)があれば作成不可。
  4. 実際のSQLイメージで確認する(例を下に示します)。
例:a(過去ある期間に一定額以上の売上があった顧客)
SELECT c.顧客番号, c.顧客名, SUM(s.売上額) AS 合計売上
FROM 売上 s
JOIN 顧客 c ON s.顧客番号 = c.顧客番号
WHERE s.売上年月日 BETWEEN '2025-01-01' AND '2025-03-31'
GROUP BY c.顧客番号, c.顧客名
HAVING SUM(s.売上額) >= 100000;
例:c(直近1か月の商品別売上額ランキング)
SELECT p.商品番号, p.商品名, SUM(s.売上額) AS 商品別売上
FROM 売上 s
JOIN 商品 p ON s.商品番号 = p.商品番号
WHERE s.売上年月日 BETWEEN '2025-06-01' AND '2025-06-30'
GROUP BY p.商品番号, p.商品名
ORDER BY 商品別売上 DESC;

選択肢別の誤答解説

  • ア: a, b
    b(在庫切れ商品)が作れないため誤り。元データに在庫数や在庫履歴がないと「在庫切れだったか」を判定できない。
  • イ: a, b, c
    bが含まれているため誤り。売上や商品・顧客の情報だけでは在庫状態は分からない。
  • ウ: a, c ← 正しい選択肢(理由は上記)。
  • エ: b, c
    bが含まれているため誤り。cは作れるが、bは不可。

よくある誤解

  1. 「売上に商品番号があるから在庫切れか分かる」
    → 売上が発生した記録は「売れた」ことを示しますが、在庫がゼロだった期間の判定には在庫数や在庫の変化(入庫・出庫履歴)が必要です。売上の有無だけでは在庫切れだったかどうかは確定できません。
  2. 「売上額がゼロなら在庫切れ」
    → 売上額がゼロの行が存在するとは限らず、売上表は売れたトランザクションのみを記録するため、売れなかった(=在庫が無かった)ことを直接示しません。

補足コラム

在庫状況を扱いたい場合は、次のような追加テーブルが一般的です。
  • 在庫テーブル(商品番号、在庫数、最終更新日時)または在庫履歴テーブル(入庫/出庫の履歴を時系列で記録)
    これらがあれば「前月に在庫切れがあった商品」の一覧を作れます。例えば在庫履歴で「在庫数が0になった日時」を検出する、あるいは期首在庫+入出庫を集計して月末の在庫を算出する方法などです。
また、売上表だけで近似的に在庫不足を推測する特殊なケースもあります(例:受注があるが出荷が記録されていない等)。しかしこれは業務ルールや他の記録(出荷/在庫履歴など)に依存し、元の3表だけでは一般化できません。

FAQ

Q. 「主キー」「外部キー」はどう使うのですか?
A. 主キー(例:顧客番号)は各行を一意に識別します。外部キー(例:売上表の顧客番号)は別表の主キーを指しており、テーブル同士を結びつけるために使います。結合(JOIN)で顧客名や商品名を引けるのはこの仕組みのおかげです。
Q. 売上データだけでランキングは簡単に作れますか?
A. はい。売上年月日で期間を絞り、商品番号でグループ化して売上額を合計すればランキングが作れます(上記SQL参照)。
Q. 在庫切れを推定する裏技はありますか?
A. 一部のケースで推定は可能でも、確実に判定するには在庫を記録する表が必要です。推定は誤判定のリスクがあるため注意が必要です。

関連キーワード: 関係データベース、主キー、外部キー、集計、JOIN、SQL、在庫管理
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

ITパスポート
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について