問題
“BOOKS”表から書名に“UNIX”を含む行を全て探すために次のSQL文を用いる。a に指定する文字列として,適切なものはどれか。ここで,書名は“BOOKS”表の“書名”列に格納されている。 SELECT * FROM BOOKS WHERE 書名 LIKE 'a'
キーボード:1〜4で選択・Enterで次へ
答え合わせ
- A
- B
- C
- D
自信の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/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビ独自の3段階の解説(初級・標準・上級)です。

