【Day40】基本情報技術者試験 SQL過去問5選!実例で学ぶデータベース操作

投稿者: | 2025年9月21日

今日は SQL文を使った基本情報技術者試験の過去問5問 をピックアップして紹介します。
SELECT文の基本から、JOIN、GROUP BY、EXISTSまで、よく出題される鉄板パターンを網羅しました。


📝 問題1:投影(列の選択)

問題(平成○年春 午前)
社員表(社員ID, 氏名, 部署, 給与)があります。
この表から「社員の氏名と給与」だけを取り出すSQLはどれか。

解答例

SELECT 氏名, 給与
FROM 社員;

解説

  • 列を選ぶ操作を「投影」という。
  • 試験では「全列(*)」と「特定の列」を区別させる問題が多い。

📝 問題2:WHEREによる選択

問題(平成○年秋 午前)
社員表から「給与が30万円以上」の社員の氏名と給与を求めるSQLはどれか。

解答例

SELECT 氏名, 給与
FROM 社員
WHERE 給与 >= 300000;

解説

  • WHERE で条件を指定。
  • 比較演算子(=, >=, <=)が問われる。

📝 問題3:GROUP BYとHAVING

問題(平成○年春 午前)
社員表から、部署ごとの平均給与を求め、平均給与が30万円以上の部署だけを抽出するSQLはどれか。

解答例

SELECT 部署, AVG(給与)
FROM 社員
GROUP BY 部署
HAVING AVG(給与) >= 300000;

解説

  • GROUP BY でグループ化し、集約関数(AVG, SUM, COUNT)を使う。
  • HAVING はグループ化後の条件指定に使う。

📝 問題4:JOIN(内部結合)

問題(平成○年春 午前)
社員表(社員ID, 氏名, 部署ID)と部署表(部署ID, 部署名)があります。
社員の氏名と部署名を表示するSQLはどれか。

解答例

SELECT s.氏名, d.部署名
FROM 社員 s
JOIN 部署 d
  ON s.部署ID = d.部署ID;

解説

  • JOIN は「両方の表をつなげる」操作。
  • テーブルに別名をつけて s.氏名 のように書くのが定番。

📝 問題5:EXISTSとNOT EXISTS

問題(平成26年春 午前 問28)
商品表と在庫表がある。在庫表に存在しない商品を商品表から抽出するSQLはどれか。

解答例

SELECT p.商品番号
FROM 商品 p
WHERE NOT EXISTS (
    SELECT *
    FROM 在庫 z
    WHERE p.商品番号 = z.商品番号
);

解説

  • EXISTS / NOT EXISTS は「存在するかどうか」をチェックする。
  • この場合は「在庫にない商品」を取り出す。

✨ まとめ

  • 問1・問2:基本のSELECTとWHERE
  • 問3:集約(GROUP BY・HAVING)
  • 問4:JOINでの複数テーブル操作
  • 問5:EXISTS / NOT EXISTS

SQLの学習は、「午前問題のパターンを押さえる」ことから始めるのがコツです。

午後問題ではこの知識を組み合わせて、長文問題を解いていく流れになります。