【過去31回分】応用情報技術者試験(午後 問6:データベース )過去問と模範解答を見て傾向と対策を考えてみた。
記事の概要
応用情報技術者試験(午後 問6:データベース) について、IPAにて公開されている過去問を全て見た上で、いくつかの切り口で分析した。
その結果「こういう考え方が有利に働くかも?」という点について解説する。
尚、あくまでも参考程度またはいざという時の最終手段としてご利用頂きたい。
ご自身での勉強は、まず十分余裕を持って取り組もう。
対象者
応用情報技術者試験の受験予定者
解きやすい問題
どういう問題が解きやすい?
人それぞれ、スキルやバックボーンにより『何が解きやすいか』は異なるが、今回は下記の通りとした。
- ER図の穴埋めが多い
- SQL文の穴埋めが多い
- 上記2つ以外の出題形式が少ない(※例えば「30文字以内で書きなさい」など)
なぜ『解きやすい』のか?
SQLは『知らないと書けない』と思われがちだが、過去問を解くことでパターンとして覚えられる。
これから紹介することだが、出題の傾向は大きく変わることはあまり無く、むしろ「前回や前々回も出た」なんてこともあったりする。
そのように蓄積した知識をぶつけやすいのが『穴埋め』となる。
特に、ER図のリレーションの穴埋めは実質選択式みたいなものである。
分析方法
傾向分析のポイント
穴埋めを高確率で正解に導くためには、2つのポイントを押さえる。
- 穴埋めはどれくらい出題されるか?
- どんなことが問われやすいのか?
切り口
上記2つのポイントを、3つの切り口から分析する。
- 穴埋め問題の割合の傾向
- ER図のリレーションはどの矢印を書くことが多いか?
- SQLの頻出キーワードは何か?
では、順番に紹介していく。
1.穴埋め問題の割合
過去31回の穴埋め率を見て、筆者は下記の通り考える。
- よほどのことが無ければ半分以上は穴埋め問題である可能性が高い。
- 概ね60%~80% の範囲で落ち着いている印象がある。
つまり、得点源になり得るということである。
あとは穴埋め以外の『何十文字以内で答えよ』などを部分点で稼げば、高得点が狙える。
尚、出題なしの回は『ER図』と『SQL』が無いだけで、穴埋め自体はある(ただし何が問われるのかは回により異なる)
【参考】平成21年~令和6年のER図・SQLの穴埋め出題率
※筆者が調査した結果である。
- H21~H27頃までは不安定。
- H28~R5までは落ち着いていた。
- R6春でやや下がったが、R6秋では80%に上がっている。
試験 | 出題率 | 備考 |
---|---|---|
R6秋 | 80% | |
R6春 | 54% | 少ない |
R5秋 | 60% | やや少ない |
R5春 | 70% | |
R4秋 | 91% | かなり多い |
R4春 | 60% | やや少ない |
R3秋 | 63% | |
R3春 | 60% | やや少ない |
R2秋 | 70% | |
R1秋 | 70% | |
H31春 | 63% | |
H30秋 | 88% | かなり多い |
H30春 | 63% | |
H29秋 | 80% | |
H29春 | 80% | |
H28秋 | 80% | |
H28春 | 77% | |
H27秋 | 44% | かなり少ない |
H27春 | 75% | |
H26秋 | 出題なし | ※内容的に出題なし |
H26春 | 88% | かなり多い |
H25秋 | 81% | |
H25春 | 85% | かなり多い |
H24秋 | 50% | かなり少ない |
H24春 | 70% | |
H23秋 | 77% | |
H23特別 | 77% | |
H22秋 | 83% | |
H22春 | 57% | 少ない |
H21秋 | 出題なし | ※内容的に出題なし |
H21春 | 66% |
2.リレーション記載の割合
こちらも同様に、過去の傾向を見た限りで筆者は下記の通り考える。
- 1対多が最も可能性が高い。
- 2本以上ある場合は1対1も疑う。
- 『ゼロ表記あり』が、そろそろまた来そうな気がする。
どうしても分からない、もしくは時間がない場合は『とりあえず1対多』という選択もアリだ。
それでも『1対多』の場合は矢印の向きに気を付けよう。
外部キー側(点線のアンダーライン)が矢印の『矢』になると覚えておこう。
ただし、主キーと外部キーを兼ねて実線になっている場合は、よく考えないと分からないだろう。
ちなみに、問題文の凡例には『多対多』が記載されていることがあるが、基本的に使わない。
なので実質は『1対多』と『1対1』のみである。
また、ゼロ表記ありは紐づく相手が『必ず存在する』か『しない場合もある』かを、『●』と『○』で記載する。
出題の可能性は低いが、周期的にまた来そうな気もするので、一応どんなものなのかくらいは確認しておこう。
【参考】平成21年~令和6年のER図リレーション情報
※筆者が調査した結果である。
- ほとんど『1対多』。
- ほとんど1本、最大でも3本。
- 出題が無かったこともあるが、令和では今のところ毎回出題されている。
試験 | 多重度 | ゼロ表記有無 | 本数 | 備考 |
---|---|---|---|---|
R6秋 | ※未公開 | なし | 3 | 予想では『1対多』が2本、『1対1』が1本 |
R6春 | 1対多 | なし | 1 | |
R5秋 | 1対多 | なし | 1 | |
R5春 | 1対多 | なし | 1 | |
R4秋 | 1対多 | なし | 3 | |
R4春 | 1対多 | なし | 1 | |
R3秋 | 1対多 | なし | 1 | |
R3春 | 1対多 | なし | 1 | |
R2秋 | 1対多 | なし | 1 | |
R1秋 | 1対多 | なし | 2 | |
H31春 | 1対多 ,1対1 | あり | 2 | |
H30秋 | 1対多 | なし | 3 | 穴埋めではなく、複数のエンティティに記述する形式で出題されている |
H30春 | 出題なし | 出題なし | 0 | |
H29秋 | 1対多 | なし | 2 | |
H29春 | 1対多 | なし | 1 | |
H28秋 | 1対多 | なし | 1 | |
H28春 | 1対多 | なし | 2 | |
H27秋 | 1対多 | なし | 1 | |
H27春 | 1対多 | なし | 1 | |
H26秋 | 出題なし | 出題なし | 0 | |
H26春 | 1対1 | なし | 1 | |
H25秋 | 1対多 | なし | 2 | |
H25春 | 1対多 | なし | 3 | |
H24秋 | 1対多 | あり | 3 | 両端にゼロ許容のパターンあり |
H24春 | 出題なし | 出題なし | 0 | |
H23秋 | 1対多 | なし | 2 | |
H23特別 | 出題なし | 出題なし | 0 | |
H22秋 | 1対多 | なし | 2 | |
H22春 | 出題なし | 出題なし | 0 | |
H21秋 | 出題なし | 出題なし | 0 | |
H21春 | 1対多 | なし | 1 |
3.SQLの頻出キーワード
こちらはバラエティに富んでいるので、過去の傾向を見ただけでは判断は難しい。
しかし、最低限知っておく必要があるものは下記の通り考える。
- ソート『ORDER BY』はウィンドウ関数でも使う。
- 集計『GROUP BY』と集計関数『SUM()』『MAX()』『AVG()』など。
- 実は集計関数は『COUNT(*)』が多い。
- 集合演算は『UNION ALL』の可能性が高い。
- 内部結合『INNER JOIN』 と外部結合『LEFT OUTER JOIN』が多い。
- 範囲を絞る『BETWEEN』も当たり前のように出る。
あとはもう、過去問を解いて覚えられるものは覚える。
下記の表を参考に、上記以外にも「出そうだな」と思ったものを勉強しておくのも有効だろう。
【参考】平成21年~令和6年のSQL出題キーワード情報
※筆者が調査した結果である。
- 大体はDML。
- 筆者はR4秋が飛び抜けて難しく、次いでR6秋が難しいと感じた。
- DX推進の影響によりウィンドウ関数が出題されることが増えた。
試験 | 構文の主な出題内容 | 備考 |
---|---|---|
R6秋 | ※未公開 | 予想では『WITH RECURSIVE』『LIKE』とか? |
R6春 | 『BETWEEN』『ORDER BY』 | ORDER BYは2回連続 |
R5秋 | 『OVER』『ORDER BY』 | ウィンドウ関数に必須のOVER |
R5春 | 『INNER JOIN』『LEFT OUTER JOIN』『BETWEEN』『GROUP BY』『COUNT(*)』 | 結合が2種類という珍しい出題 |
R4秋 | 『DEFAULT』『PRIMARY KEY』『FOREIGN KEY』 | 前回に続きDDLの出題。特にFOREIGNは、とっさに書けないのでは? |
R4春 | 『ALTER TABLE』『SET ※UPDATE文』 | DDLの出題。ALTERは普段から使ってないと厳しい? |
R3秋 | 『COUNT(*)』『VALUES』『UNION』『ON ※結合用』 | INSERT文に必要なVALUESも意表を突かれる? |
R3春 | 『INNER JOIN ~ ON』『GROUP BY』 | |
R2秋 | 『NOT EXISTS』『HAVING COUNT(*)~』『MIN()』 | EXISTSとHAVINGは午前試験や基本情報でも見ることはあるが、いざ書けるか? |
R1秋 | 『SUM()』 | |
H31春 | 『UNION か UNION ALL』『EXISTS』『SUM()』『>= CURRENT_DATE』 | この回は幅広く知らないと厳しい? |
H30秋 | 『GRANT』『COUNT(*)』 | 珍しくDCLが・・・(GRANT) |
H30春 | 『GROUP BY』『ORDER BY』 | |
H29秋 | 『SUM()』『INNER JOIN ~ USING』 | 内部結合にONを使わずUSINGとするパターン |
H29春 | キーワード特になし | |
H28秋 | 『SUM()』『ORDER BY』『SET ※UPDATE文』 | |
H28春 | 『LEFT OUTER』『ORDER BY ~ DESC と ASC』 | ソートで降順にするためのDESC。ASCは昇順だがデフォルトでは不要 |
H27秋 | 『IS NULL』 | |
H27春 | 『EXISTS』 | 意外と書けない? |
H26秋 | 出題なし | ※内容的に出題なし |
H26春 | 『COUNT(*)』 | |
H25秋 | 『MIN()』 | |
H25春 | 『LEFT OUTER JOIN』『IS NULL』『ORDER BY ~ DESC』 | ソートで降順にするためのDESC |
H24秋 | 出題なし | |
H24春 | 『UNION か UNION ALL』『IS NULL』 | 集合演算はUNIONのように『どっちでも正解』パターンがよくある |
H23秋 | 『SUM()』『BETWEEN』『ORDER BY』 | |
H23特別 | 『CREATE TABLE』『PRIMARY KEY』『SUM()』 | 2回連続PRIMARY KEY |
H22秋 | 『PRIMARY KEY』『SUM()』 | PRIMARYは特に普段から使わないと書けない |
H22春 | 出題なし | |
H21秋 | 出題なし | |
H21春 | 『SUM()』『UNION ALL』『DISTINCT』 | DISTINCTってこの回しか出てないの?! |
まとめ
では、3つの切り口を全て紹介したので、ポイントをまとめる。
- ER図とSQLの穴埋めは、データベースの問題中60%~80%を占めるので得点源である。
- ER図のリレーションは『1対多』の場合が多い。迷ったら『1対多』※間違えるリスクを覚悟で
- SQLは頻出のものは最低限押さえて、他も出来る限り過去問を解く時に覚える。
最後に
今回この記事を執筆しようと考えたきっかけだが、筆者は現在YouTubeで応用情報技術者試験のデータベースについて、過去問解説動画を作成している。
動画は試験回ごとの紹介となるのだが、そうではなく試験の傾向を一覧形式で見られるものを作りたいと思い「そういうものはブログで表現した方が良い」と考えたのである。
基本的には、動画もこの記事も考え方は同じで、言ってみればこの記事の考え方に基づいて、動画で1回分ずつ解いているようなイメージとなる。
もし興味があれば、試しに観てみて欲しいと思うのでリンクを貼っておく。
それでは、今回は以上にて締めようと思う。
ここまで読んで頂き、多謝!!m(_ _)m
Discussion