【SQL】文字のパターンを見抜いて狙い撃ち!「LIKE演算子とワイルドカード」|情報処理問題1000本ノック
データベースから「名前に『データ』が含まれる商品」や「型番が『A』から始まるデータ」を検索する。実務でも必須となる文字列のあいまい検索「LIKE演算子」を攻略しましょう。
1. 【 問題 】:文字列のパターンマッチング(あいまい検索)
【 問題 】 次の「社員」表に対して、SQL文を実行したとき、得られる検索結果の行数(レコード数)として、最も適切なものはどれでしょうか?
なお、SQL文中の「%」は0文字以上の任意の文字列を表すワイルドカード記号(パターン文字)とします。
| 社員番号 | 氏名 | 部署名 |
|---|---|---|
| E001 | 佐藤 敏夫 | 開発1課 |
| E002 | 鈴木 データ | DX推進課 |
| E003 | 高橋 明美 | 開発2課 |
| E004 | データ 一郎 | 総務課 |
| E005 | 田中 次郎 | 開発1課 |
| E006 | 木村 データ太 | 企画課 |
SELECT 氏名 FROM 社員 WHERE 氏名 LIKE '%データ%'
① 3行
② 2行
③ 1行
④ 6行
2. 正解:
正解: ① 3行
3. 解説:前後をワイルドカードで挟むと「部分一致」になる
SQLで文字の「部分一致(あいまい検索)」を行いたいときは、`=` ではなく `LIKE` 演算子を使用します。そして、文字がどこにあっても引っかかるようにするために使われるのが「%(ワイルドカード)」です。
・`'データ%'`(前方一致):頭に「データ」がつく人だけ(「データ 一郎」の1行のみ)
・`'%データ'`(後方一致):お尻に「データ」がつく人だけ(「鈴木 データ」の1行のみ)
・`'%データ%'`(部分一致):今回の正解です。「データの前に文字があってもなくても、後ろに文字があってもなくても良い」という意味になります。つまり、氏名の中のどこかに「データ」という3文字が含まれていればすべて抽出されます。 ← ココが問題の正解!
【 実行結果の表(サンプル) 】
| 氏名 |
|---|
| 鈴木 データ |
| データ 一郎 |
| 木村 データ太 |
「鈴木 データ」「データ 一郎」だけでなく、前後に文字がある「木村 データ太」も条件に合致するため、合計3行が抽出されます。
★ ② 2行の罠:「データという文字が、名前の最初か最後にきているもの」と勘違いして、途中に文字が入っている「木村 データ太」を数え落としてしまった人を落とす罠です。
★ ③ 1行の罠:`'%データ%'` ではなく `'データ%'`(前方一致)だと勘違いし、苗字がデータさんである「データ 一郎」の1行だけをカウントしてしまった場合の数値です。
1. 理解のコツ: 「ネットショッピングのキーワード検索」に例えてみましょう。
・検索窓に「チョコ」と入れて検索したとき、お菓子の「チョコ(完全一致)」だけでなく、「生チョコ(後方一致)」や「チョコバナナ(前方一致)」、さらには「高級チョコレート(部分一致)」も全部まとめてヒットしますよね。
・SQLの `LIKE '%データ%'` は、まさにこのネット検索と全く同じ動きをデータベースに命令しています。『とにかく、どこかにこの文字が入っていれば全部持ってきて!』という、一番よく使う便利な検索方法です。
2. 試験対策の視点: 試験では、今回の `%`(0文字以上の任意の文字列) に加えて、もう一つのワイルドカードである `_`(アンダースコア:任意の「1文字」) との引っ掛け問題が非常によく出題されます。例えば `LIKE 'データ_'` だと、「データ+後ろにちょうど1文字だけ」という意味になり、「データ太」は2文字なのでヒットしなくなります。この2つの記号の意味の違いを正確に見極めることが、午前試験のSQL問題を制するカギです。
4. まとめ
「特定の文字列が含まれるデータを柔軟に検索するために、LIKE演算子とワイルドカード記号(%や_)を組み合わせてパターンマッチングを行う手法」。これがSQLのあいまい検索です。新分野【SQL】の土台として、この条件抽出のルールをがっちり押さえておきましょう!