[初心者向け]MySQLで特定のキーワードを含むデータを取得する方法~like検索の使い方


20130403-01

本日MySQLで特定のキーワードを含むデータだけを抽出したいんだけどどうやるの?と質問をいただきました。誰かの役に立つかもしれないのでブログでもご紹介します。

IT/WEB業界への転職なら求人サイトGreen

例えば、書籍の価格をまとめた以下のようなテーブル「books」があったとします。
title、priceと言う2つの項目のみになっているとします。

■booksテーブル
┏━━━━━━━━━━━━━━━┯━━━┓
┃title │price ┃
┣━━━━━━━━━━━━━━━┿━━━┫
┃ニュースの読み方 │1,200 ┃
┠───────────────┼───┨
┃入門初めてのPHP │3,500 ┃
┠───────────────┼───┨
┃初めてのMySQLデータベース入門 │2,800 ┃
┗━━━━━━━━━━━━━━━┷━━━┛

このbooksテーブルからMySQLに関連したデータだけを取り出したい場合を考えてみましょう。この場合、「SELECT * FROM books where title = ‘MySQL’」
としても、書籍名が「MySQL」だけで無ければ取り出せません。
「MySQL入門」や「初めてのMySQL」のように、ほとんどの書籍が「MySQL」という語句の前後に別の文字を含んでいるはずだからです.
このように特定のキーワードを含むデータを取りだす場合には, like演算子と「%」(パーセント)や「_」(アンダーバー)を組み合わせてWhere句を指定します。

「%」は0文字以上の任意の文字列を意味し、「_」は任意の 1文字を表します.

使い方

末尾が「MySQL」になる、いわゆる後方一致検索の場合は、「LIKE ‘%MySQL’」のようにします’。

WHERE フィールド名 LIKE '%文字列'

前方一致検索の場合は、「LIKE ‘MySQL%’」のようにします。

WHERE フィールド名 LIKE '文字列%'

部分一致検索(どこかに含まれていれば良い)の場合は、「LIKE ‘%MySQL%’」のようにします。

WHERE フィールド名 LIKE '%文字列%'

‘_’は任意の1文字にマッチします。1で始まり3で終わる3文字の文字列を検索する場合、1_3のようにします。

WHERE フィールド名 LIKE '1_3'

エスケープ処理

‘%’や’_’を文字列に含む場合にマッチさせたい場合、「¥」を前につけてエスケープを行います。

¥%
¥_
¥¥

特定の文字列を含まないデータのみ取得したい場合は NOT 演算子を使います。

WHERE フィールド名 NOT LIKE '%文字列%'

大文字小文字を区別する場合

デフォルトでは大文字と小文字を区別しませんので、区別を行いたい場合はBINARY演算子を使用します。

WHERE フィールド名 LIKE BINARY '%Japan%'

この場合、Japanと言うデータにはマッチしますがjapanにはマッチしません。

オススメ書籍

MySQLを学んで行く方には、やはり書籍が便利です。
初めての方には以下の書籍がオススメですよ^^

以上、MySQLで特定のキーワードを含むデータを取得する方法でした。

 

この記事が気に入ったら
いいね!しよう

最新情報をお届けします

follow us in feedly