【MySQL】あいまい検索する方法


ここではMySQLで、あいまい検索(曖昧検索)する方法を紹介しています。

あいまい検索する方法

あいまい検索する場合は、LIKE演算子とワイルドカードを組み合わせて抽出条件を指定します。

ワイルドカードの意味は次の通りです。
・%
 任意の0文字以上の文字列を指します。
・_
 任意の1文字の文字を指します。

あいまい検索を行う場合には次のようにLIKE演算子を組み合わせて使います。

--キーワードを含むレコードを検索する場合
SELECT 列名 FROM 表名 WHERE 列名 LIKE '%キーワード%';

--先頭がキーワードになるレコードを検索する場合
SELECT 列名 FROM 表名 WHERE 列名 LIKE 'キーワード%';

--最後がキーワードになるレコードを検索する場合
SELECT 列名 FROM 表名 WHERE 列名 LIKE '%キーワード';

あいまい検索のSQLサンプル

全6件のレコードが登録されたテーブルからemp_name列の値が’na’を含むレコードをあいまい検索で取得しています。

mysql> SELECT * FROM tab1;
+--------+----------+-------+------+
| emp_id | emp_name | dept  | age  |
+--------+----------+-------+------+
| 00001  | Suzuki   | HR    |   28 |
| 00002  | Tanaka   | SALES |   25 |
| 00003  | Kizaki   | SALES |   35 |
| 00004  | Tanaka   | DEV   |   45 |
| 00005  | Kizaki   | DEV   |   55 |
| 00006  | Nakata   | DEV   |   35 |
+--------+----------+-------+------+
6 rows in set (0.01 sec)

mysql> SELECT * FROM tab1 WHERE emp_name LIKE '%na%';
+--------+----------+-------+------+
| emp_id | emp_name | dept  | age  |
+--------+----------+-------+------+
| 00002  | Tanaka   | SALES |   25 |
| 00004  | Tanaka   | DEV   |   45 |
| 00006  | Nakata   | DEV   |   35 |
+--------+----------+-------+------+
3 rows in set (0.01 sec)

emp_name列の値がTaで始まるレコード、taで終わるレコードを検索しています。

mysql> SELECT * FROM tab1 WHERE emp_name LIKE 'Ta%';
+--------+----------+-------+------+
| emp_id | emp_name | dept  | age  |
+--------+----------+-------+------+
| 00002  | Tanaka   | SALES |   25 |
| 00004  | Tanaka   | DEV   |   45 |
+--------+----------+-------+------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM tab1 WHERE emp_name LIKE '%ta';
+--------+----------+------+------+
| emp_id | emp_name | dept | age  |
+--------+----------+------+------+
| 00006  | Nakata   | DEV  |   35 |
+--------+----------+------+------+
1 row in set (0.00 sec)