ITパスポート 令和7年度 問66:databaseに関する問題
関係データベースで管理している次の"ログイン記録"表及び"部署"表において,ログイン結果が失敗となったことのある,又は,2022年4月10日09:00:00以前にログイン結果が成功となったことのある従業員が所属する部署名だけを全て挙げたものはどれか。[ログイン記録表] 2022-04-10 08:50:42/10004/003/失敗、2022-04-10 08:53:15/10004/003/成功、2022-04-10 08:55:48/10002/002/成功、2022-04-10 09:00:15/10001/001/成功、2022-04-10 09:01:05/10012/002/成功、2022-04-10 09:03:01/10008/003/成功、2022-04-10 09:10:28/10007/001/成功、2022-04-10 09:32:19/10002/002/成功、2022-04-10 09:39:22/10005/003/失敗、2022-04-10 10:00:02/10011/001/失敗、2022-04-10 10:05:51/10011/001/成功、2022-04-10 10:30:45/10009/002/成功。[部署表] 001=営業部、002=システム部、003=人事部。
- a営業部, システム部
- b営業部, システム部, 人事部正答
- c営業部, 人事部
- dシステム部, 人事部
AI解説(初心者・標準・上級)
理解度に合わせて3レベルの解説を無料で読めます。
答えは b「営業部, システム部, 人事部」 です。
クラスの出席チェックで「1回でも欠席した人」か「朝9時より前に来た人」を探すイメージです。条件は2つあって、どちらか一方でも当てはまればOK(OR)です。
表をざっと見ると、ログインに失敗した人は人事部(003)と営業部(001)にいます。さらに、9時より前に成功した人にシステム部(002)もいます。つまり3つの部署すべてに「当てはまる人」がいるので、答えは全部です。
👉 覚え方:「失敗した人」+「朝早く成功した人」を別々に探して、出てきた部署を合体する。
ほかの選択肢:a・c・dはどれか1つの部署が抜けているので不正解です。
なぜこれが正解か
正解は b。条件は「失敗が1回でもある」または「09:00:00以前に成功がある」のOR(どちらか満たせば対象)。
- 失敗あり: 10004→人事部(003)、10005→人事部(003)、10011→営業部(001)
- 09:00:00以前に成功: 10004→人事部、10002→システム部(002)
合わせると対象は営業部・システム部・人事部の3つすべて。
各選択肢の解説
- a 営業部,システム部:人事部が抜けている。
- c 営業部,人事部:システム部が抜けている。
- d システム部,人事部:営業部が抜けている。
覚え方・ひっかけ注意
ひっかけは「09:00:00以前」の境界。09:00:15(10001)は9時を過ぎているので成功条件には入りません。OR条件は「足し算(和集合)」、AND条件なら「重なりだけ」と区別して読むのがコツ。
理論的背景
本問は関係データベースにおける集合演算(UNION・和集合)とSQL論理演算子の理解を問う実践的問題である。正解はb(営業部・システム部・人事部 全3部署)である。
条件の分析を詳述する。「ログイン結果が失敗となったことのある従業員」の特定:ログイン記録表から失敗レコードを抽出すると、従業員ID 10004(部署003:人事部)、10005(部署003:人事部)、10011(部署001:営業部)が該当する。「2022年4月10日09:00:00以前にログイン結果が成功となったことのある従業員」の特定:09:00:00以前(厳密に前)の成功レコードは、08:53:15/10004/003/成功 と 08:55:48/10002/002/成功 の2件。従業員ID 10004(人事部)と 10002(システム部)が該当する。
以上を「OR(または)」で結合:人事部(10004・10005経由)、営業部(10011経由)、システム部(10002経由)の全3部署が対象となる。ここでの重要なSQLの考え方は「UNION(和集合)」による重複除去である。10004は両条件を満たすが部署は人事部の1件として数える。
実務での使われ方
本問のようなログインデータ分析は、セキュリティ監査・不正アクセス検出・コンプライアンス対応の場面で日常的に実施される。実務でのSQL実装例として考えると、2つの条件をORで結合するためのSQLは以下の構造となる。
第1アプローチ(サブクエリ+IN句):対象従業員のIDをそれぞれのサブクエリで取得し、部署テーブルをINNER JOINして部署名を取得する。第2アプローチ(EXISTS・相関サブクエリ):部署ごとにサブクエリを使って条件を満たす従業員の存在を確認する。第3アプローチ(UNION + DISTINCT):2条件をそれぞれSELECTして従業員IDのUNIONを作り、それをもとに部署名を取得する。実務では実行計画とインデックスの有無を考慮してアプローチを選択する。
このような「アクセスログ分析」はSIEM(Security Information and Event Management)システムでも中核的な機能であり、Splunk・IBM QRadar・Azure Sentinelなどの製品が複雑な条件のログ相関分析を自動化している。
試験での位置づけ
ITパスポートのデータベース分野では、関係データベースの基本概念(表・行・列・主キー・外部キー)、SQL基本操作(SELECT・WHERE・JOIN)の概念理解、そして本問のような表を使ったデータ読解問題が出題される。ITパスポートではSQLの構文を書かせる問題はなく、「この条件でどのデータが対象になるか」という論理的な条件読解が問われる点が特徴である。本問のポイントは「09:00:00以前」という条件の境界値の扱いと、OR条件による集合の結合である。09:00:15(5秒後)は「以前」に含まれないことに気づけるかが正答の鍵となる。
基本情報技術者試験ではSQLの実際の構文(SELECT・FROM・WHERE・GROUP BY・HAVING・ORDER BY・JOIN・サブクエリ)に加え、正規化(第1〜第3正規形・BCNF)・関数従属性・主キーと候補キーの概念まで問われる。
選択肢の発展補足
選択肢aの「営業部・システム部」(正解から人事部が抜ける)を選んだ場合、「失敗したことがある」条件で人事部の10004と10005を見落としている可能性がある。10005は09:39:22に失敗しているため「失敗あり」の条件を満たしているが、「09:00以前に成功あり」の条件では10005は該当しない。しかし10004は両方の条件を満たすため、この時点で人事部は含まれる。選択肢cの「営業部・人事部」(システム部が抜ける)は10002が「09:00以前の成功」条件を満たす点を見落とした場合に選択される。10002は08:55:48に成功しており、これは09:00:00の「以前」(厳密に前)の条件を満たす。境界値の取り扱い(「以前」は「未満」か「以下」か)についても、本問では厳密に「09:00:00 未満」として解釈することが正答への鍵である。
出典:IPA(情報処理推進機構)公式 ITパスポート試験 令和7年度 問66/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。