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

MySQLで部分一致する値を抽出する方法|LIKE演算子の使い方を実例付きで解説

MySQLで文字列の一部が一致するレコード(部分一致)を抽出したい場合は、LIKE演算子を使用します。本記事では、実際にテーブルを作成し、データを挿入したうえで、LIKE演算子による部分一致検索の手順をサンプルコード付きで解説します。

1. サンプルテーブルの作成

まず、学生情報を管理するテーブルを作成します。

mysql> create table DemoTable806(
    StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentName varchar(100),
    StudentSubject varchar(100)
);
Query OK, 0 rows affected (0.57 sec)

このテーブルは、学生ID(StudentId)、氏名(StudentName)、履修科目(StudentSubject)の3つのカラムを持っています。

2. テストデータの挿入

次に、INSERT文を使ってサンプルデータを登録します。

mysql> insert into DemoTable806(StudentName,StudentSubject) values('Chris','Java in Depth With Data Structure');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable806(StudentName,StudentSubject) values('Robert','Introduction to MySQL');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable806(StudentName,StudentSubject) values('Bob','C++ in Depth With Data Structure And Algorithm');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable806(StudentName,StudentSubject) values('Adam','Introduction to MongoDB');
Query OK, 1 row affected (0.11 sec)

3. 登録データの確認

SELECT文ですべてのレコードを表示して、データが正しく登録されているか確認しましょう。

mysql> select *from DemoTable806;

実行結果は以下の通りです。

+-----------+-------------+------------------------------------------------+
| StudentId | StudentName | StudentSubject |
+-----------+-------------+------------------------------------------------+
| 1 | Chris | Java in Depth With Data Structure |
| 2 | Robert | Introduction to MySQL |
| 3 | Bob | C++ in Depth With Data Structure And Algorithm |
| 4 | Adam | Introduction to MongoDB |
+-----------+-------------+------------------------------------------------+
4 rows in set (0.00 sec)

4. LIKE演算子による部分一致検索

ここからが本題です。「Depth」という文字列を含む科目名を持つレコードだけを抽出してみます。WHERE句の中でLIKE演算子を使い、検索したい文字列の前後を%(パーセント)で囲みます。

mysql> select *from DemoTable806 where StudentSubject LIKE '%Depth%';

実行結果は以下の通りです。

+-----------+-------------+------------------------------------------------+
| StudentId | StudentName | StudentSubject |
+-----------+-------------+------------------------------------------------+
| 1 | Chris | Java in Depth With Data Structure |
| 3 | Bob | C++ in Depth With Data Structure And Algorithm |
+-----------+-------------+------------------------------------------------+
2 rows in set (0.00 sec)

「Introduction to MySQL」や「Introduction to MongoDB」のように「Depth」を含まないレコードは除外され、「Depth」という単語を含む2件のみが抽出されました。

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

LIKE演算子では、以下のワイルドカードを組み合わせて柔軟な検索が可能です。

  • %:任意の0文字以上の文字列に一致します。「%Depth%」なら前後にどんな文字列があっても「Depth」を含む値がヒットします。
  • _(アンダースコア):任意の1文字に一致します。例えば「_ob」は「Bob」のような3文字目以降が「ob」の文字列にマッチします。

また、前方一致だけなら「'Java%'」、後方一致だけなら「'%Algorithm'」のように記述することもできます。

まとめ

MySQLで部分一致検索を行うには、WHERE句とLIKE演算子、そしてワイルドカード「%」を組み合わせるのが基本です。完全一致では見つけられない曖昧な条件での検索に非常に便利なので、ぜひ活用してください。なお、大量のデータに対して先頭に「%」を付ける検索を頻繁に行う場合はインデックスが効きにくくなるため、パフォーマンス面にも注意が必要です。

  1. MySQLストアドプロシージャでテーブル名を変更する簡単な方法

    はい、ALTERコマンドとRENAMEを組み合わせることで、MySQLのストアドプロシージャ内でもテーブル名を変更できます。この記事では、実際の手順をサンプルコードとともに段階的に解説します。 1. テーブルの作成 まず、サンプル用のテーブルを作成しましょう。 mysql> create table DemoTable1859 ( Id int ); Query OK, 0 rows affected (0.00 sec) 2. レコードの挿入 INSERTコマンドを使って、テーブルにいくつかのレコードを挿入します。 mysql> insert into

  2. MySQLで値が「0」の場合に別の列から値を取得する方法

    MySQLで値が「0」の場合に別の列から値を取得する方法MySQLでは、IF()関数を使用することで、特定の列の値が「0」だった場合に、別の列の値を代わりに取得できます。条件分岐を1つのクエリ内で簡単に実現できる便利な関数です。IF()関数の基本構文select IF(yourColumnName1=0,yourColumnName2,yourColumnName1) as anyAliasName from yourTableName;この構文では、最初の列の値が「0」であれば2番目の列の値を返し、「0」以外であれば最初の列の値をそのまま返します。サンプルテーブルの作成まず、動作確認用のテー