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

選択肢
ア:a, b
イ:a, b, c
ウ:a, c(正解)
エ:b, c
🔒 解説は解答すると表示されます
関係データベースの表から作成できる一覧の判定【ITパスポート 解説】
正解の理由
与えられた3つの表(売上、顧客、商品)で使える情報は次のとおりです。
- 売上表:売上番号、顧客番号、商品番号、売上年月日、売上額(→「いつ」「誰が」「何を」「いくらで」買ったかが分かる)
- 顧客表:顧客番号、顧客名(→顧客番号で顧客の名前が分かる)
- 商品表:商品番号、商品カテゴリ名、商品名(→商品番号で商品名やカテゴリが分かる)
これらから、
- 「過去のある期間に一定額以上の売上があった顧客の一覧」(a)は、売上表の売上年月日と売上額、顧客番号を使って集計すれば作れる。
- 「直近1か月の商品別売上額ランキング」(c)は、売上表の売上年月日・売上額・商品番号を使って商品別に合計し順位付けすれば作れる。
一方、「前月に在庫切れがあった商品の一覧」(b)は、在庫(何個残っているか)を示すデータがどの表にも存在しないため、元の3表だけでは判定できません。
したがって作成できるものは a と c で、選択肢は ウ になります。
(補足用語)
- リレーショナルデータベース(関係データベース):表(テーブル)でデータを管理する方式。
- 主キー(primary key):各行を一意に識別する列(例:売上番号)。
- 外部キー(foreign key):別の表の主キーを参照する列(例:売上表の顧客番号は顧客表の顧客番号を参照)。
解法ステップ
- 各表にどんな列(項目)があるかを確認する。特に「日時」「数量・金額」「識別子(番号)」を探す。
- 問題で求められている一覧を、どの項目で作るかを考える。集計(合計)やフィルタ(日付範囲、閾値)で対応できるかを検討する。
- 必要な情報が全て既存の表の列で得られるなら作成可能。足りない情報(在庫数など)があれば作成不可。
- 実際の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は不可。
よくある誤解
- 「売上に商品番号があるから在庫切れか分かる」
→ 売上が発生した記録は「売れた」ことを示しますが、在庫がゼロだった期間の判定には在庫数や在庫の変化(入庫・出庫履歴)が必要です。売上の有無だけでは在庫切れだったかどうかは確定できません。 - 「売上額がゼロなら在庫切れ」
→ 売上額がゼロの行が存在するとは限らず、売上表は売れたトランザクションのみを記録するため、売れなかった(=在庫が無かった)ことを直接示しません。
補足コラム
在庫状況を扱いたい場合は、次のような追加テーブルが一般的です。
- 在庫テーブル(商品番号、在庫数、最終更新日時)または在庫履歴テーブル(入庫/出庫の履歴を時系列で記録)
これらがあれば「前月に在庫切れがあった商品」の一覧を作れます。例えば在庫履歴で「在庫数が0になった日時」を検出する、あるいは期首在庫+入出庫を集計して月末の在庫を算出する方法などです。
また、売上表だけで近似的に在庫不足を推測する特殊なケースもあります(例:受注があるが出荷が記録されていない等)。しかしこれは業務ルールや他の記録(出荷/在庫履歴など)に依存し、元の3表だけでは一般化できません。
FAQ
Q. 「主キー」「外部キー」はどう使うのですか?
A. 主キー(例:顧客番号)は各行を一意に識別します。外部キー(例:売上表の顧客番号)は別表の主キーを指しており、テーブル同士を結びつけるために使います。結合(JOIN)で顧客名や商品名を引けるのはこの仕組みのおかげです。
A. 主キー(例:顧客番号)は各行を一意に識別します。外部キー(例:売上表の顧客番号)は別表の主キーを指しており、テーブル同士を結びつけるために使います。結合(JOIN)で顧客名や商品名を引けるのはこの仕組みのおかげです。
Q. 売上データだけでランキングは簡単に作れますか?
A. はい。売上年月日で期間を絞り、商品番号でグループ化して売上額を合計すればランキングが作れます(上記SQL参照)。
A. はい。売上年月日で期間を絞り、商品番号でグループ化して売上額を合計すればランキングが作れます(上記SQL参照)。
Q. 在庫切れを推定する裏技はありますか?
A. 一部のケースで推定は可能でも、確実に判定するには在庫を記録する表が必要です。推定は誤判定のリスクがあるため注意が必要です。
A. 一部のケースで推定は可能でも、確実に判定するには在庫を記録する表が必要です。推定は誤判定のリスクがあるため注意が必要です。
関連キーワード: 関係データベース、主キー、外部キー、集計、JOIN、SQL、在庫管理

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

