ワイルドカードを使ってあいまい検索をする~パターンマッチング Like~

MySQL

SQLであいまい検索をする方法について紹介していきます。

前提条件

使用するテーブル:USERSテーブル

+----+----------+------+------------------+
| id | name     | age  | email            |
+----+----------+------+------------------+
|  1 | 柴犬     |    7 | shibainu@dog.com |
|  2 | コーギー |    8 | corgi@dog.com    |
|  3 | ダックス |   10 | daks@dog.com     |
|  4 | パグ     |    3 | pug@dog.com      |
|  5 | シーズー |   17 | shi-tzu@dog.com  |
|  6 | 秋田犬   |   12 | akitainu@dog.com |
+----+----------+------+------------------+

取得するデータ

nameカラムから’犬’という文字を含む犬種のデータを取得していきます。

あいまい検索の基本

あいまい検索をするにはLike演算子とワイルドカードを使用して行うことができます

構文

文字の前にワイルドカード(%または_)がついている

select * from users where name like '%犬';

または

select * from users where name like '_犬';

’犬’よりも前の文字をあいまいにして検索することができる

今回はワイルドカードに%(パーセント)を利用した書き方で出力を行います。

出力結果

+----+--------+------+------------------+
| id | name   | age  | email            |
+----+--------+------+------------------+
|  1 | 柴犬   |    7 | shibainu@dog.com |
|  6 | 秋田犬 |   12 | akitainu@dog.com |
+----+--------+------+------------------+
2 rows in set (0.000 sec)
解説

コードを解説します

select * from users where name like '%犬'; 

whereで検索条件を指定することを宣言します。

name like ‘%犬’はnameカラムから’犬’という文字の前に何からしらの文字列が入るデータを検索するという意味です。今回の場合は秋田犬と柴犬が該当しているので取得することができました。

select * from usersはUSERSテーブルからすべてのカラムを取得するという記述です。上記の検索条件と検索方法をどのテーブルで実行してどのカラムを取るかを記述していきます。

ワイルドカードの種類と使い方

ワイルドカードの種類と使い方について紹介していきます。

ワイルドカードの種類
  • %(パーセント):任意の文字列を表す
  • _(アンダーバー):任意の1文字を表す

ワイルドカードは検索文字と一緒に記述することで利用することができます。また、記述する場所によってあいまいにする位置を指定することができます。

指定の文字よりも前に何かしらの文字が入る場合、ワイルドカードを前に記述することで検索することができる。

select * from users where name like '%犬';
select * from users where name like '_犬';

指定の文字よりも後に何かしらの文字が入る場合、 ワイルドカードを後ろに記述することで検索することができる。

select * from users where name like '柴%';
select * from users where name like '柴_';

指定の文字の前後に何かしらの文字が入る場合、 ワイルドカードを前後に記述することで検索することができる。

select * from users where name like '%犬%';
select * from users where name like '_犬_';

指定の文字の前に何かしらの2文字が入る場合、ワイルドカード(__)を前に記述することで検索することができる。

select * from users where name like '__犬';

※上記は犬の前に任意の文字1文字を表す_(アンダーバー)が2つはいっています。

Point!
  • %は文字列を意味するので検索範囲が広がる
  • _(アンダーバー)は1文字のみなので検索範囲が狭い
  • _(アンダーバー)を利用すると文字数を指定することもできる

タイトルとURLをコピーしました