基本情報 平成25年度 秋期 問29:テクノロジ系に関する問題
“BOOKS”表から書名に“UNIX”を含む行を全て探すために次の SQL 文を用いる。 a に指定する文字列として, 適切なものはどれか。ここで, 書名は “BOOKS" 表の “書名”列に格納されている。 SELECT * FROM BOOKS MHERE 書名 LTKE | 』 |
- a%UNIX
- b%UNIX%正答
- cUNIX
- dUNIX%
AI解説(初心者・標準・上級)
理解度に合わせて3レベルの解説を無料で読めます。
答えは b「%UNIX%」 です。
SQLの `LIKE` は「文字パターン検索」で、`%` は「何かしらの文字列(0文字以上)」を表すワイルドカード。
- `%UNIX%` = 「前にも後にも何が来てもいいから、間にUNIXがあればOK」 → 含む検索
- `%UNIX` = 「UNIXで終わる」
- `UNIX%` = 「UNIXで始まる」
- `UNIX` = 「ピッタリUNIXだけ」
書名に UNIX を含む ものを探すので両側に%が必要。
👉 覚え方:「%=なんでもOKマーク。両側に付けて挟み撃ち=含む検索」。
ほかの選択肢:a「で終わる」/c「完全一致」/d「で始まる」。
なぜこれが正解か
正解は b(%UNIX%)。LIKE句のワイルドカードは2種類:
- `%` = 任意の0文字以上の文字列
- `_` = 任意の1文字
「書名にUNIXを含む」=「UNIXの前後に任意の文字列を許可」なので、両側を`%`で挟む `%UNIX%` が正しい。
各選択肢の解説
- a `%UNIX`:UNIXで「終わる」書名のみマッチ。「Practical UNIX」はOKだが「UNIX入門」はNG。
- c `UNIX`:完全一致のみ。「UNIX」というタイトルそのものだけ。
- d `UNIX%`:UNIXで「始まる」書名のみ。「UNIX入門」はOKだが「Hello UNIX」はNG。
覚え方・ひっかけ注意
「`%`は両側で挟む=含む検索」「`_`は1文字穴埋め」。`%`を含むデータそのものを検索したい場合は `ESCAPE` 句で `'%50\%%' ESCAPE '\'` のように記述。`LIKE`は大文字小文字を区別するかどうかDBMS依存(MySQLの大文字小文字を区別しない照合順序ではUNIX/unixが同義になる)。フルスキャンになりやすく性能注意。
理論的背景
LIKEは文字列パターンマッチ演算子で、`%`(任意0文字以上)・`_`(任意1文字)の2種類のメタ文字を持つ。SQL標準仕様(ISO/IEC 9075)で定義され、ほとんどのRDBMSが準拠。正規表現(POSIX regex)のサブセットに相当し、より高度なパターン検索が必要なら`SIMILAR TO`(SQL99)または`REGEXP`/`~`(DBMS依存)を使う。
実務での使われ方
前方一致 `'UNIX%'` はB-treeインデックスでインデックスシーク可能で高速。後方一致 `'%UNIX'` および部分一致 `'%UNIX%'` はインデックスを使えずフルテーブルスキャンになり性能劣化する。大規模テーブルでは: ①関数インデックス(`REVERSE(列)`に索引)で後方一致を高速化、②全文検索インデックス(PostgreSQLのtsvector、MySQLのFULLTEXT、Elasticsearchへの外出し)で部分一致を高速化、が定石。さらに日本語のあいまい検索ではN-gramまたは形態素解析ベースの転置インデックスが必要。
試験での位置づけ
FE午前のデータベース分野で必出。①ワイルドカードの種類と意味、②LIKEの構文、③性能影響(インデックス利用可否)、の3点が主要論点。AP/DBスペシャリストでは全文検索インデックス、CASE式、CONCAT・SUBSTRING等の文字列関数まで範囲。
選択肢の発展補足
SQLインジェクション対策の観点で、ユーザー入力をLIKE句に直接結合すると`%`や`_`が攻撃ベクタになり得る。例: `LIKE '%' + 入力 + '%'`に`%admin%`を入れると不必要に広い検索が走る。プリペアドステートメント+エスケープ処理(`LIKE ? ESCAPE '\'`)が安全策。また`COLLATE`句で照合順序を明示すれば、ケース感度・アクセント感度を制御できる。
出典:IPA(情報処理推進機構)公式 基本情報技術者試験 平成25年度 秋期 問29/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。