ワイルドカード%と_の意味と、該当する氏名の数え方
ITパスポート試験 令和6年度 問93 / データベース › データ操作
過去問にチャレンジ
関係データベースで管理している「従業員」表から、氏名が「%葉_ 」に該当する従業員を抽出した。抽出された従業員は何名か。ここで、「_」は任意の1文字を表し、「%」は0文字以上の任意の文字列を表すものとする。

- ア
1
- イ
2
- ウ
3
- エ
4
会話形式の解説
講師この問題では、ワイルドカードの記号「%」と「_」の意味を正確に押さえているかが問われています。ワイルドカードは、任意の文字の代わりに使う記号のことです。「葉」の後ろに何文字あるかに注目してください。
受験者「葉」が入っている氏名を数えればよいと思いました。表の6名は全員「葉」が入っているので、選択肢にない6名になってしまいます。どこかで考え違いをしているのでしょうか。
講師そこがつまずきやすいところです。「%」は0文字以上の任意の文字列、「_」はちょうど1文字を表します。パターンは文字列の全体に当てはめるので、「%葉_」は「何文字かあって、葉があり、その後ろにちょうど1文字あって終わる」という形になります。
受験者つまり、最後から2文字目が「葉」の氏名だけが当てはまる、ということですね。
講師そのとおりです。では、千葉翔はどうでしょう。
受験者「千」が「%」、「葉」の後ろの「翔」が「_」に当たるので、一致します。鈴木葉子も「鈴木」が「%」、「子」が「_」なので一致すると思います。
講師正しいです。次に稲葉小春はどうですか。
受験者「葉」の後ろが「小春」の2文字です。「_」はちょうど1文字なので、一致しません。「葉」の後ろの文字数を見落とすと、ここを誤って数えて3名になりそうです。
講師そうですね。葉山花子も、「葉」の後ろが3文字あるので対象外です。残りの佐藤乙葉と秋葉彩葉はどう判断しますか。
受験者佐藤乙葉は「葉」が最後の文字なので、後ろに1文字がありません。秋葉彩葉は「葉」が2回出てきますが、最後の「葉」の後ろには文字がありません。1つ目の「葉」の後ろは2文字なので、どちらでも一致しないと思います。
講師よく確かめられています。「葉」が2回出てくる氏名は、どちらの「葉」で区切っても条件を満たさないことを確認するのが大切です。ここまでをまとめると、どうなりますか。
受験者一致するのは千葉翔と鈴木葉子の2名です。「葉」を含むかではなく、「葉」の位置と、前後の文字数で判定するのですね。
講師そのとおりです。SQLでは、この条件を WHERE 氏名 LIKE '%葉_' のように書きます。「葉」を含む氏名をすべて探したいときは「%葉%」を使います。「%」は文字がまったくない場合も含み、「_」は0文字や2文字以上には一致しない、という違いを押さえておけば、似た問題にも対応できます。
まとめ
ワイルドカード「%」は0文字以上の任意の文字列、「_」はちょうど1文字を表します。パターンは文字列全体に当てはめるため、「%葉_」は最後から2文字目が「葉」の氏名だけに一致します。表の6名のうち、条件を満たすのは千葉翔と鈴木葉子の2名です。稲葉小春や葉山花子は「葉」の後ろが2文字以上あり、佐藤乙葉と秋葉彩葉は末尾の「葉」の後ろに文字がないため一致しません。「葉」を含むかどうかではなく、「葉」の位置と前後の文字数で判定することがポイントです。
解答・解説
正解はイです
この問題のテーマ
関係データベースで文字列を部分一致で検索するときのワイルドカード「%」と「_」の意味を問う問題です。パターン「%葉_」に一致する氏名を数えます。
解き方の考え方
パターン「%葉_」は、0文字以上の任意の文字列、「葉」、ちょうど1文字が順に並び、そこで文字列が終わる形を表します。つまり、末尾から2文字目が「葉」である氏名だけが該当します。表の6名を1人ずつ確かめ、「葉」の後ろの文字数がちょうど1文字かどうかを見ます。条件に合ったのは千葉翔と鈴木葉子で、合計は2名です。正解のイの「2」と一致します。
選択肢ごとの解説
- ×ア 1「1」名は少なすぎます。千葉翔は「千」が%、「翔」が_に当たり、鈴木葉子も「鈴木」が%、「子」が_に当たります。該当者は2名いるので、1名ではありません。
- ○イ 2「2」名が正解です。千葉翔と鈴木葉子は、どちらも「葉」の後ろがちょうど1文字で終わるため、パターンに一致します。ほかの4名は「葉」の後ろの文字数が条件に合いません。
- ×ウ 3「3」名は、「葉」の後ろが1文字でない氏名まで数えた場合の誤りです。たとえば稲葉小春は「葉」の後ろが「小春」の2文字なので、パターンに一致しません。
- ×エ 4「4」名は、「葉」を含む氏名を広く数えすぎています。佐藤乙葉は「葉」が末尾にあり、後ろに1文字がないので該当しません。秋葉彩葉も最後の「葉」の後ろに文字がなく、途中の「葉」の後ろは2文字なので該当しません。葉山花子は「葉」の後ろが3文字あるので対象外です。
補足
SQLでは、この条件を WHERE 氏名 LIKE '%葉_' のように書きます。「葉」を含む氏名をすべて探したいときは「%葉%」を使います。秋葉彩葉のように「葉」が2回出てくる氏名は、どちらの「葉」で区切っても条件を満たさないことを確かめると、数え間違いを防げます。
POINT
- 「%」は0文字以上の任意の文字列を表し、文字がまったくない場合も含みます。
- 「_」はちょうど1文字を表し、0文字や2文字以上には一致しません。
- パターンは文字列全体に対して当てはめるので、「%葉_」は「葉」の後ろが1文字で終わる文字列だけに一致します。
- 「葉」を含むかどうかではなく、「葉」の位置と前後の文字数で判定します。
