今日は 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の学習は、「午前問題のパターンを押さえる」ことから始めるのがコツです。
午後問題ではこの知識を組み合わせて、長文問題を解いていく流れになります。
