【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)