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

基本情報技術者 2016年 秋期 午前(科目A)29


問題文

“社員”表と“部門”表に対して、次のSQL文を実行したときの結果はどれか。    SELECT COUNT(*) FROM 社員, 部門   WHERE 社員.所属部門 = 部門.部門名 AND 部門.フロア = 2
基本情報技術者 2016年 秋期 午前(科目A) 問29の問題画像

選択肢

1
2
3(正解)
4

社員と部門の結合による件数算出【午前2 解説】

要点まとめ

  • 結論: 社員と部門を結合し、部門のフロアが2である社員の件数はCOUNT(*)で3件になると判断します。
  • 根拠: フロア2の部門は情報システム・経理・法務・購買の4つで、所属社員は情報システム2名と経理1名、合計3名です。
  • 差がつくポイント: COUNT(*)は結合後の行数を数えるため、重複やDISTINCTの有無、結合条件の実装(WHERE vs JOIN)に注意してください。

正解の理由

SELECT の FROM にカンマで複数テーブルが書かれ、WHERE で社員.所属部門 = 部門.部門名 と部門.フロア = 2 が指定されています。
これは内部結合(INNER JOIN)と同義で、結合条件を満たす行のみが結果に残ります。フロア2の部門に一致する社員レコードを数えると、該当する社員は3行になり、COUNT(*) の結果は 3 です。
一致する組(結合後の行)を列挙すると次のとおりです。
  • 社員番号 11002 / 所属 経理 → 部門: 経理(フロア2)
  • 社員番号 11005 / 所属 情報システム → 部門: 情報システム(フロア2)
  • 社員番号 12002 / 所属 情報システム → 部門: 情報システム(フロア2)
したがって正解は (3)。

よくある誤解

  • 「フロア2の部門が4つだから答えは4」と考える誤り:COUNT(*) は結合後の行数(社員側のマッチ数)を数えるため、部門の個数とは異なります。
  • 「COUNT が列に対して使われているとNULL除外で数が変わる」と混同する:COUNT(*) は NULL を含めずに行数を数えるので、本問では影響ありません(NULL の無いキーでの結合)。
  • 結合方法を誤認してクロス結合(総当たり)を想定するミス:WHERE による等価条件があるため、結果は内部結合と同じです。

解法ステップ

  1. 部門表からフロア = 2 の部門名を抽出する(情報システム、経理、法務、購買)。
  2. 社員表の所属列と突き合わせ、所属が上記部門名に該当する社員を取り出す。
  3. 該当する社員は情報システム(11005,12002)と経理(11002)の3名であることを確認する。
  4. COUNT(*) は結合後の行数を返すため答えは 3。

選択肢別の誤答解説

  • ア: 1 — 誤り。フロア2の部門は複数あり、該当社員も1名以上いるため1にはなりません。
  • イ: 2 — 誤り。情報システムが2名であることから2と誤答しがちですが、経理の11002も含めると合計は3になります。
  • ウ: (3) — 正解。結合結果の行数は3で、COUNT(*) の結果と一致します。
  • エ: 4 — 誤り。フロア2の部門数が4であることと、結合後の社員数を混同した場合に生じる誤答です。

補足コラム

  • 同じ条件を明示的な JOIN 構文で書くと可読性が上がります。例えば:
SELECT COUNT(*)
FROM 社員
JOIN 部門 ON 社員.所属部門 = 部門.部門名
WHERE 部門.フロア = 2;
  • COUNT(*) は結合後の「行」を数えるため、同じ社員が複数の部門行にマッチする(部門名の重複など)と重複してカウントされます。重複を除きたい場合は COUNT(DISTINCT 社員.社員番号) を使います。
  • 本問では部門名がユニークであり、社員側の所属は単一値なので単純に3件となります。

FAQ

Q1: COUNT() と COUNT(列名) で結果は変わりますか?
A1: COUNT(
) は全行を数えます。COUNT(列名) はその列が NULL でない行のみ数えます。本問のようにNULLが関係ない場合は差は出ません。
Q2: 部門名が重複していたらどうなる?
A2: 部門に同名の行が複数あると、社員はそれぞれの部門行と結合され複数行としてカウントされます。重複を排除するなら DISTINCT を使います。
Q3: WHERE と JOIN の違いで結果は変わりますか?
A3: 等価結合条件を WHERE に書くか JOIN ... ON に書くかで結果は同じ(内部結合)ですが、可読性や外部結合の指定などで使い分けが必要です。

関連キーワード: SQL、SELECT、COUNT、JOIN、INNER JOIN、WHERE、集計、結合、DISTINCT、テーブル設計、データベース、集計関数
← 前の問題へ次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

基本情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

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

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