
応用情報|データベース・SQL 実戦問題集50問【科目A対策】
データベース・SQLの知識を、条件を読んで正解を選ぶ力へつなげる科目A向け問題集です。全50問・4択・各問に正解と解説付き。前半は基本、後半は複数条件の判断を練習します。
単品500円の買い切り。最初の5問と解説は無料、問6〜50・スコア診断・復習方法は有料部分です。まず無料5問で説明との相性を確認してください。学習用のオリジナル問題です。
この記事で学べること
問題は、次の4段階で構成しています。

特に、次の判断を自分でできるようになることを目指します。
どの列を主キー・外部キーにすればよいか
関数従属から、正規化に必要な分解を判断できるか
SQLが抽出・結合・集計する対象を追えるか
WHEREとHAVINGを使い分けられるか
インデックスの効果と更新時の負担を説明できるか
同時実行や障害発生時に、何が起きるかを判断できるか
おすすめの使い方
① 問題を読む → ② 解答を決める → ③ 正解を確認する → ④ 解説を読む → ⑤ 間違えた理由を残す
この順番で進めてください。
各問の直後に正解と解説があります。解くときは、正解が見える位置までスクロールせず、紙やメモに「問1:イ」のように記録すると取り組みやすくなります。
正解していても、勘で選んだ問題には印を付けましょう。復習では、**正答数よりも「理由を説明できるか」**を重視します。
初回は時間を測らずに考え、2周目は50問を60〜75分で解くことを目安にしてください。これは本記事の演習用の目安です。
問題共通の前提
SQLは、一般的な関係データベースで用いられる基本的な構文を扱います。
特に断りがなければ、表に示した行だけが存在します。
NULLは、値が不明・未設定であることを表します。
SELECTは、DISTINCTを指定しない限り重複を取り除きません。
ORDER BYがない場合、結果の行の順序は問いません。
正規化の問題では、明示された関数従属と、そこから導ける関数従属だけを考えます。
トランザクションや障害回復の問題では、各問に示した方式・条件に従って判断します。
LEVEL 1|基礎確認
問1|主キー
社員表の各行を一意に識別するため、社員番号を主キーに設定する。主キーの制約として適切なものはどれか。
ア.重複は許されるが、NULLは許されない
イ.重複もNULLも許されない
ウ.重複は許されないが、NULLは許される
エ.重複もNULLも許される
正解:イ
解説
主キーは、各行を一意に識別するための列、または列の組合せです。そのため、重複もNULLも許されません。
社員名は同姓同名があり得るため、通常は一意な社員番号などを使います。複数列を組み合わせた主キーでは、その組合せ全体が一意である必要があります。
問2|外部キー
部署表の部署IDが主キーであり、社員表の部署IDには、部署表を参照する外部キー制約が設定されている。社員表の部署IDはNULLを許さない。
制約を満たす操作はどれか。
ア.部署表に存在しない部署IDを、社員表に登録する
イ.部署IDにNULLを設定して、社員を登録する
ウ.部署表に存在する同じ部署IDを、複数の社員に設定する
エ.社員から参照されている部署を、参照への対処をせず削除する
正解:ウ
解説
同じ部署に複数の社員が所属できるため、社員表の部署IDは重複して構いません。
外部キーは、参照先との整合性を保つ制約です。参照先にない値の登録はできません。また、ここではNULLを許さず、参照中の部署の削除についても、連鎖削除などの対処を前提としていないため認められません。
問3|WHEREによる抽出
商品表は次のとおりである。

次のSQLが返す商品IDはどれか。
SELECT 商品ID
FROM 商品
WHERE 価格 >= 1000 AND 価格 < 1500;ア.P2、P3
イ.P1、P2、P3
ウ.P3、P4
エ.P2、P3、P4
正解:ア
解説
条件は「1,000以上」と「1,500未満」の両方を満たすことです。1,000は含み、1,500は含まないため、P2とP3が該当します。
SQLの条件問題では、まず境界の値を確認しましょう。>=と>、<=と<の違いが正答を分けます。
問4|NULLの判定
社員表から、電話番号が未設定である社員を抽出したい。電話番号の未設定はNULLで表される。
WHERE句に指定する条件として適切なものはどれか。
ア.電話番号 = NULL
イ.電話番号 <> NULL
ウ.電話番号 = ''
エ.電話番号 IS NULL
正解:エ
解説
NULLの判定にはIS NULLを使います。
NULLを=や<>で比較しても、条件は真になりません。また、空文字列''とNULLは、一般的なSQLでは異なるものです。未設定でない行を抽出する場合は、IS NOT NULLを使います。
問5|ACID特性
口座Aから口座Bへ送金する処理を、次の二つの更新で構成する。
口座Aの残高を減らす。
口座Bの残高を増やす。
途中で異常が起きた場合に、一方の更新だけを残さず、両方とも取り消す性質はどれか。
ア.一貫性
イ.独立性
ウ.原子性
エ.耐久性
正解:ウ
解説
原子性は、トランザクションの処理が全部実行されるか、全部実行されないかを保証する性質です。
送金で片方の更新だけが残ると、残高の合計が変わってしまいます。二つの更新を一つのトランザクションにまとめることで、途中の失敗時には両方を取り消せます。
一貫性は整合した状態を保つこと、独立性は同時実行による干渉を制御すること、耐久性は確定した結果を障害後も保持することに関係します。
無料5問の次は、表と条件から答えを判断する45問へ
無料5問の続きは問6〜50の45問・正解と解説・スコア診断・復習方法です。この分野だけなら単品500円、複数分野なら同じ記事を含む全8分野400問セット(買い切り2,980円)の収録内容と比較できます。
購入済み・月額プラン加入中の方へ
本記事または収録セットを購入済みの方は、同じ記事を買い直す必要はありません。単品購入済みの記事はセットと重複するため、未購入分の価格と比べてください。月額プラン利用中の方も対象教材・閲覧可否を先に確認し、対象の記事は追加購入不要です。
復習先:SQL集計は問15→16、正規化は問12→13→14へ。答えと理由を記録し、翌日に誤答と迷った問題を解き直してください。