ITパスポート 2016年 春期 問96
問題文
関係データベースの“成績”表から学生を抽出するとき、選択される学生数が最も多い抽出条件はどれか。ここで、“%”は0文字以上の任意の文字列を表すものとする。また、数学及び国語は、それぞれ60点以上であれば合格とする。

選択肢
ア:国語が合格で、かつ、氏名が“%子”に該当する学生
イ:国語が合格で、かつ、氏名が“子%”に該当する学生
ウ:数学、国語ともに合格の学生
エ:数学が合格で、かつ、氏名が“%子%”に該当する学生(正解)
🔒 解説は解答すると表示されます
成績表から学生を抽出する条件のうち、選択される学生数が最も多いもの【ITパスポート 解説】
正解の理由
問題で与えられた条件を1行ずつ確認すると、数学が合格(60点以上)か、国語が合格か、氏名の文字列パターン(LIKE 演算子の
%)がどう当てはまるかがポイントです。% は0文字以上の任意の文字列を表します。各選択肢を満たす学生数を数えると、数学が合格で氏名に「子」が含まれる(氏名 LIKE '%子%')を条件とする エ が最も多く、3人になります。したがって エ が正解です。
解法ステップ
- 「合格」の定義を確認:数学・国語ともに「60点以上」で合格(>=60)。
- 氏名のパターン意味を整理:
- '%子':文字列の末尾が「子」
- '子%':文字列の先頭が「子」
- '%子%':文字列のどこかに「子」が含まれる
- 各学生について、数学合否・国語合否・氏名パターン該当を判定する。
- 各選択肢について条件を満たす学生を数え、最大のものを選ぶ。
具体的な評価(簡潔):
- H001 佐藤 花子(数学50, 国語90)→ 国語合格、氏名は末尾が「子」 → matches '%子' と '%子%'
- H002 鈴木 二郎(数学55, 国語70)→ 国語合格、氏名に「子」なし
- H003 金子 一郎(数学90, 国語95)→ 数学・国語合格、氏名に「子」が含まれるが末尾ではない → matches '%子%'
- H004 高橋 春子(数学70, 国語55)→ 数学合格、氏名は末尾が「子」 → matches '%子' と '%子%'
- H005 子安 三郎(数学95, 国語60)→ 数学・国語合格、氏名は先頭が「子」 → matches '子%' と '%子%'
それぞれの選択肢の該当人数は次のとおり:
- ア(国語合格 AND 氏名 LIKE '%子')→ H001 のみ:1人
- イ(国語合格 AND 氏名 LIKE '子%')→ H005 のみ:1人
- ウ(数学・国語とも合格)→ H003, H005:2人
- エ(数学合格 AND 氏名 LIKE '%子%')→ H003, H004, H005:3人 ← 最大
選択肢別の誤答解説
- ア: 「%子」は末尾が「子」の意味です。末尾が「子」かつ国語合格なのは H001 のみで、1人です。金子(一郎)は氏名に「子」はあるが末尾ではない点に注意。
- イ: 「子%」は先頭が「子」です。先頭が「子」かつ国語合格は H005(子安 三郎、国語60)のみで、1人です。
- ウ: 両科目合格(数学も国語も60点以上)は H003 と H005 の2人です。氏名条件は無く、次に多い選択肢ですが エ より少ないです。
- エ: 数学合格(数学>=60)かつ氏名に「子」を含む('%子%')は H003、H004、H005 の3人で最多です。したがって正解です。
よくある誤解
- 「%子」は「子が含まれる」と同義だと思ってしまう誤り:実際は「末尾が子」です。含まれるかどうかは '%子%' を使います。
- 名前の「子」が苗字か名前かを意識しない:氏名は「苗字 + 空白 + 名前」の1つの文字列なので、末尾・先頭判定は全体の文字列で行われます(例:金子 一郎は「金子」が苗字であっても全体の末尾は「一郎」)。
- 合格判定を「60点より大きい」と誤る(>60 と見る):問題文は「60点以上」と明記されており、60 点も合格です(>=60)。
補足コラム
SQL(Structured Query Language:構造化照会言語)で今回の選択肢を表すと、以下のようになります(氏名フィールドを「氏名」と仮定)。
- ア(国語合格かつ末尾が「子」)
SELECT * FROM 成績
WHERE 国語 >= 60
AND 氏名 LIKE '%子';
- イ(国語合格かつ先頭が「子」)
SELECT * FROM 成績
WHERE 国語 >= 60
AND 氏名 LIKE '子%';
- ウ(数学・国語とも合格)
SELECT * FROM 成績
WHERE 数学 >= 60
AND 国語 >= 60;
- エ(数学合格かつ氏名に「子」を含む)
SELECT * FROM 成績
WHERE 数学 >= 60
AND 氏名 LIKE '%子%';
補足:LIKE のワイルドカードには
%(0文字以上) のほかに _(任意の1文字)があります。用途に応じて使い分けます。覚え方(簡単な語呂):
- '%子' = 「後ろが子」
- '子%' = 「前が子」
- '%子%' = 「どこかに子」
FAQ
Q. 「金子 一郎」はなぜ '%子' に一致しないのですか?
A. 氏名全体は「金子 一郎」で末尾は「一郎」です。'%子' は全体の末尾が「子」であることを要求するため一致しません。'%子%' なら含まれているので一致します。
A. 氏名全体は「金子 一郎」で末尾は「一郎」です。'%子' は全体の末尾が「子」であることを要求するため一致しません。'%子%' なら含まれているので一致します。
Q. '%子%' は '子' だけの名前にもマッチしますか?
A. はい。
A. はい。
% は0文字以上の任意文字列なので、文字列が「子」の場合も '%子%' は一致します。Q. 合格基準が「60点以上」なら60点は合格ですか?
A. はい。「以上」は >= の意味です。60点は合格になります。
A. はい。「以上」は >= の意味です。60点は合格になります。
関連キーワード: SQL、LIKE、ワイルドカード、文字列検索、比較演算子、SELECT、WHERE、合格判定、氏名検索

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

