IPA過去問ドリル

平成25年度 秋期 システムアーキテクト試験 午前Ⅱ 問21

テクノロジ/データベース

“社員”表から同姓同名が存在する社員の氏名を抽出する SQL 文はどれか。 〔社員〕(社員番号,氏名,生年月日,所属) 0001,新井 健二,1970-02-04,営業部 0002,鈴木 太郎,1975-03-13,総務部 0003,佐藤 宏,1981-07-11,技術部 0004,田中 博,1978-01-24,企画部 0005,鈴木 太郎,1968-11-09,営業部 (注:本サイトでは原問題の表を文字表記に変換しています)

出典:平成25年度 秋期 システムアーキテクト試験 午前Ⅱ 問21

正解:ア

解説

同姓同名の社員を抽出するには,氏名でグループ化(GROUP BY)した上で,同じ氏名のグループに含まれる行数が 2 以上(HAVING COUNT(*) > 1)であるものを抽出すればよいです。これにより,同一の氏名をもつ社員が複数存在する(同姓同名が存在する)氏名だけを絞り込むことができます。

選択肢ごとの解説

  • 正しい。氏名で GROUP BY し,同じ氏名の行数が 1 より多い(HAVING COUNT(*) > 1)ものを抽出することで,同姓同名が存在する社員の氏名を抽出できます。
  • 誤り。WHERE 氏名 = 氏名 は,各行自身の氏名列同士を比較する条件であり,常に真となるため,単に全ての氏名を抽出するだけで,同姓同名の絞り込みにはなりません。
  • 誤り。WHERE 氏名 = 氏名 は常に真となる無意味な条件であり,ORDER BY を付けても全氏名を並べ替えて抽出するだけで,同姓同名の絞り込みにはなりません。
  • 誤り。氏名と件数を GROUP BY で集計して一覧表示するだけであり,HAVING 句などで件数が 2 以上のものに絞り込んでいないため,同姓同名でない社員の氏名も含めて全て抽出されてしまいます。
システムアーキテクトの過去問を演習モードで解く