マナビングITパスポート

ワイルドカード%と_の意味と、該当する氏名の数え方

ITパスポート試験 令和6年度 問93 / データベース › データ操作

過去問にチャレンジ

令和6年度 問93

関係データベースで管理している「従業員」表から、氏名が「%葉_ 」に該当する従業員を抽出した。抽出された従業員は何名か。ここで、「_」は任意の1文字を表し、「%」は0文字以上の任意の文字列を表すものとする。

令和6年度 問93の図
  1. ア

    1

  2. イ

    2

  3. ウ

    3

  4. エ

    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
    「1」名は少なすぎます。千葉翔は「千」が%、「翔」が_に当たり、鈴木葉子も「鈴木」が%、「子」が_に当たります。該当者は2名いるので、1名ではありません。
  2. ○イ  2
    「2」名が正解です。千葉翔と鈴木葉子は、どちらも「葉」の後ろがちょうど1文字で終わるため、パターンに一致します。ほかの4名は「葉」の後ろの文字数が条件に合いません。
  3. ×ウ  3
    「3」名は、「葉」の後ろが1文字でない氏名まで数えた場合の誤りです。たとえば稲葉小春は「葉」の後ろが「小春」の2文字なので、パターンに一致しません。
  4. ×エ  4
    「4」名は、「葉」を含む氏名を広く数えすぎています。佐藤乙葉は「葉」が末尾にあり、後ろに1文字がないので該当しません。秋葉彩葉も最後の「葉」の後ろに文字がなく、途中の「葉」の後ろは2文字なので該当しません。葉山花子は「葉」の後ろが3文字あるので対象外です。

補足

SQLでは、この条件を WHERE 氏名 LIKE '%葉_' のように書きます。「葉」を含む氏名をすべて探したいときは「%葉%」を使います。秋葉彩葉のように「葉」が2回出てくる氏名は、どちらの「葉」で区切っても条件を満たさないことを確かめると、数え間違いを防げます。

POINT

  • 「%」は0文字以上の任意の文字列を表し、文字がまったくない場合も含みます。
  • 「_」はちょうど1文字を表し、0文字や2文字以上には一致しません。
  • パターンは文字列全体に対して当てはめるので、「%葉_」は「葉」の後ろが1文字で終わる文字列だけに一致します。
  • 「葉」を含むかどうかではなく、「葉」の位置と前後の文字数で判定します。

※出典:令和6年度 ITパスポート試験 問93(一部改変)