ITパスポート 2019年 春期 問78
問題文
関係データベースの“社員”表と“部署”表がある。“社員”表と“部署”表を結合し、社員の住所と所属する部署の所在地が異なる社員を抽出する。抽出される社員は何人か。

選択肢
ア:1
イ:2(正解)
ウ:3
エ:4
🔒 解説は解答すると表示されます
社員表と部署表の結合で「住所と部署所在地が異なる社員」を数える問題【ITパスポート 解説】
正解の理由
関係データベース(複数の表で情報を管理するデータベース)では、社員表と部署表を部署コードで結びつけて(結合=JOIN:表同士をつなげて情報を組み合わせる操作)各社員の「住所」と所属部署の「所在地」を比較します。与えられた表を照合すると、住所と部署所在地が異なる社員は「高橋 四郎(神奈川県/部署所在地:東京都)」と「鈴木 一郎(三重県/部署所在地:愛知県)」の2名です。したがって正しい選択肢は イ です。
解法ステップ
- 社員表の「部署コード」と部署表の「部署コード」をキーで結合する(内部結合=INNER JOINでOK)。
- 結合した結果で、社員の「住所」と部署の「所在地」を比較する(等しくない条件)。
- 比較結果が「異なる」行を数える(社員ごとに1件扱い)。
具体的に表を照らすと、該当は高橋(H002)と鈴木(H003)の2名です。
選択肢別の誤答解説
- ア: 1
1人だけだと少なすぎます。実際には高橋と鈴木の2名が条件に当てはまります。 - イ: 2
正解。社員と部署を結合して比較すると、異なるのは高橋(神奈川県 vs 東京都)と鈴木(三重県 vs 愛知県)の2名です。 - ウ: 3
3人になるには渡辺(愛知県)や他の誰かが異なるとみなす必要がありますが、渡辺は部署(製造部)の所在地も愛知県で一致します。 - エ: 4
4人は明らかに多すぎます。多くの社員は勤務先と住所が一致しているためここまで増えません。
よくある誤解
- 「部署コードで結合する必要を忘れる」
社員表だけ見て住所の重複や差を数えてしまうと間違えます。部署表と照合して所在地を取らないと正解になりません。 - 「部分一致で判断してしまう」
例:「神奈川県」と「神奈川」など表記ゆれを気にすることがあります。ここでは表にある文字列が完全一致か否かで判定します。 - 「外部結合と内部結合を混同する」
部署に存在しない社員がいた場合の扱いが変わります(今回の表では全社員の部署が部署表に存在するため問題になりません)。
補足コラム
実際にSQLでどう書くかの例を示します。ここでは社員表を employee、部署表を department と仮定します。
SELECT e.社員ID, e.氏名, e.住所, d.所在地
FROM employee e
INNER JOIN department d
ON e.部署コード = d.部署コード
WHERE e.住所 <> d.所在地;
- INNER JOIN(内部結合)は両方の表に対応する行があるものだけを結合します。
- WHERE の
<>は「等しくない」を意味します。 - 結果の行数を数えたい場合は
COUNT(*)を使います。
今回の問題では全ての社員に対応する部署が部署表にあるため、内部結合で問題なく解けます。もし部署表に存在しない部署コードの社員も含めて扱いたい場合は LEFT JOIN(左外部結合)を使います。
FAQ
Q1: 部署コードが一致しない社員がいたらどうする?
A1: 部署表にない社員も含めて「所在地が異なる」を判定したいなら LEFT JOIN を使い、部署が存在しない場合は所在地が NULL になる点に注意します(NULL は比較できません)。
A1: 部署表にない社員も含めて「所在地が異なる」を判定したいなら LEFT JOIN を使い、部署が存在しない場合は所在地が NULL になる点に注意します(NULL は比較できません)。
Q2: 住所が部分的に一致する場合はどう判断する?
A2: 問題文通りなら文字列の完全一致で判断します。実務では「都道府県だけ比較する」など条件を明確にします。
A2: 問題文通りなら文字列の完全一致で判断します。実務では「都道府県だけ比較する」など条件を明確にします。
Q3: 集計で間違えやすい点は?
A3: 社員ごとに1件で数えること。部署ごとや重複行を数えないように注意してください。
A3: 社員ごとに1件で数えること。部署ごとや重複行を数えないように注意してください。
関連キーワード: リレーショナルデータベース、テーブル結合、JOIN、内部結合、SQL、WHERE句、部署コード、主キー・外部キー、文字列比較

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

