MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのLIKE演算子で使えるワイルドカード「%」と「_」の使い方を徹底解説

MySQLのLIKE演算子は、ワイルドカード文字と組み合わせて使用することで、指定したパターンに一致する文字列データを柔軟に検索できます。ワイルドカードとは、複雑な条件に合致するデータを効率的に探し出すための特殊文字のことです。LIKE演算子と一緒に使えるワイルドカードには、主に次の2種類があります。

%(パーセント)― 0文字以上の任意の文字列に一致

「%」は、0文字・1文字・複数文字など、任意の長さの文字列に一致するワイルドカードです。基本構文は次のとおりです。

Select Statement…Where column_name LIKE 'X%'

ここで「X」は任意の開始パターン(1文字以上)を表し、「%」が0文字以上の任意の文字列にマッチします。「%」は指定パターンとの組み合わせ方によってさまざまな検索が可能です。以下に代表的な使用例を紹介します(例中のXは指定パターンを表します)。

1. LIKE 'X%':前方一致検索

「X」で始まる値をすべて検索します。

mysql> Select * from Student Where name LIKE 'a%';
+------+-------+---------+---------+
| Id   | Name  | Address | Subject |
+------+-------+---------+---------+
| 2    | Aarav | Mumbai  | History |
+------+-------+---------+---------+
1 row in set (0.00 sec)

2. LIKE '%X':後方一致検索

「X」で終わる値をすべて検索します。

mysql> Select * from Student Where name LIKE '%v';
+------+--------+---------+-----------+
| Id   | Name   | Address | Subject   |
+------+--------+---------+-----------+
| 1    | Gaurav | Delhi   | Computers |
| 2    | Aarav  | Mumbai  | History   |
| 20   | Gaurav | Jaipur  | Computers |
+------+--------+---------+-----------+
3 rows in set (0.00 sec)

3. LIKE '%X%':部分一致検索

任意の位置に「X」を含む値をすべて検索します。

mysql> Select * from Student Where name LIKE '%h%';
+------+---------+---------+----------+
| Id   | Name    | Address | Subject  |
+------+---------+---------+----------+
| 15   | Harshit | Delhi   | Commerce |
| 21   | Yashraj | NULL    | Math     |
+------+---------+---------+----------+
2 rows in set (0.00 sec)

4. LIKE 'X%X':前方一致+後方一致検索

「X」で始まり、「X」で終わる値をすべて検索します。

mysql> Select * from Student Where name LIKE 'a%v';
+------+-------+---------+---------+
| Id   | Name  | Address | Subject |
+------+-------+---------+---------+
| 2    | Aarav | Mumbai  | History |
+------+-------+---------+---------+
1 row in set (0.00 sec)

_(アンダースコア)― 任意の1文字に一致

「_」は、ちょうど1文字に一致するワイルドカードです。基本構文は次のとおりです。

Select Statement…Where column_name LIKE 'X_'

ここで「X」は任意の開始パターンを表し、「_」がその直後のちょうど1文字にマッチします。「_」は単独でも、「%」との組み合わせでも利用でき、より精密なパターン検索を実現できます。以下に具体例を示します。

1. LIKE 'X_':Xの後にちょうど1文字続く値を検索

たとえば「200_」と指定すると、2000〜2009年の4桁の年が該当します。

mysql> Select * from student WHERE year_of_Admission LIKE '200_';
+------+---------+---------+-----------+--------------------+
| Id   | Name    | Address | Subject   | year_of_Admission  |
+------+---------+---------+-----------+--------------------+
| 1    | Gaurav  | Delhi   | Computers |               2001 |
| 15   | Harshit | Delhi   | Commerce  |               2009 |
| 21   | Yashraj | NULL    | Math      |               2000 |
+------+---------+---------+-----------+--------------------+
3 rows in set (0.00 sec)

2. LIKE '_X':Xの前にちょうど1文字ある値を検索

たとえば「_017」と指定すると、末尾が「017」でその前に1文字ある値(2017など)が該当します。

mysql> Select * from student WHERE year_of_Admission LIKE '_017';
+------+--------+---------+-----------+--------------------+
| Id   | Name   | Address | Subject   | year_of_Admission  |
+------+--------+---------+-----------+--------------------+
| 20   | Gaurav | Jaipur  | Computers |               2017 |
+------+--------+---------+-----------+--------------------+
1 row in set (0.00 sec)

3. LIKE '_X%':%との組み合わせ

2番目の位置に「X」がある値をすべて検索します。

mysql> Select * from student WHERE Name LIKE '_a%';
+------+---------+---------+-----------+--------------------+
| Id   | Name    | Address | Subject   | year_of_Admission  |
+------+---------+---------+-----------+--------------------+
| 1    | Gaurav  | Delhi   | Computers |               2001 |
| 2    | Aarav   | Mumbai  | History   |               2010 |
| 15   | Harshit | Delhi   | Commerce  |               2009 |
| 20   | Gaurav  | Jaipur  | Computers |               2017 |
| 21   | Yashraj | NULL    | Math      |               2000 |
+------+---------+---------+-----------+--------------------+
5 rows in set (0.00 sec)

4. LIKE 'X_%_%':%との組み合わせ

「X」で始まり、全体の長さが3文字以上である値をすべて検索します。

mysql> Select * from student WHERE Name LIKE 'g_%_%';
+------+--------+---------+-----------+--------------------+
| Id   | Name   | Address | Subject   | year_of_Admission  |
+------+--------+---------+-----------+--------------------+
| 1    | Gaurav | Delhi   | Computers |               2001 |
| 20   | Gaurav | Jaipur  | Computers |               2017 |
+------+--------+---------+-----------+--------------------+
2 rows in set (0.00 sec)

このように、LIKE演算子とワイルドカードを組み合わせることで、完全一致だけでは実現できない柔軟な文字列検索が可能になります。あいまいな条件で広く検索したい場合は「%」、文字数まで厳密に指定したい場合は「_」といったように、用途に応じて使い分けると効果的です。

  1. MySQL 8.0の新機能まとめ:追加された7つの主要機能を解説

    本記事では、MySQL 8.0で新たに追加された主要機能についてわかりやすく解説します。セキュリティ、パフォーマンス、文字セットなど多方面にわたる改善点を確認していきましょう。セキュリティレベルの強化MySQL 8.0ではセキュリティレベルが大幅に改善され、DBA(データベース管理者)はアカウント管理においてより柔軟な運用が可能になりました。これにより、きめ細かな権限設定や安全なユーザー管理が実現しています。リソースグループリソースグループの作成と管理が可能になり、サーバー内で動作するスレッドを特定のグループのリソースに割り当てられるようになりました。グループの属性を使用することで、リソースの

  2. MySQL 8.0で削除された主なオプションと変数の一覧

    MySQL 8.0で削除されたオプションと変数についてMySQL 8.0では、パフォーマンス向上と機能の整理に伴い、多くの廃止予定だったオプションやシステム変数が削除されました。特に大きな変更点として、長年非推奨とされてきたクエリキャッシュ機能の完全な削除が挙げられます。ここでは、MySQL 8.0で削除された代表的なオプションと変数を、削除されたバージョンとあわせて紹介します。クエリキャッシュ関連の変数(8.0.3で削除)Qcache_free_blocks: クエリキャッシュ内の空きメモリブロック数を示すステータス変数です。Qcache_free_memory: クエリキャッシュに割り当て