MySQLのSELECT文にワイルドカードを追加する方法(CONCAT関数の活用)
MySQLでSELECT文にワイルドカードを追加するには?
MySQLで部分一致検索を行いたい場合、CONCAT()関数を使ってLIKE句にワイルドカード(%)を動的に追加する方法が便利です。値の前後に「%」を連結することで、文字列の一部分だけでも検索できるようになります。
基本構文
ワイルドカードを追加して検索する場合、基本的な構文は以下の通りです。
SELECT * FROM テーブル名 WHERE カラム名 LIKE CONCAT('%', 検索値, '%');この書き方により、指定した値がカラム内のどこに含まれていても(前方・中間・後方)ヒットするようになります。
サンプルテーブルの作成
まず、動作を確認するためのテーブルを作成しましょう。
mysql> create table demo48 -> ( -> id int not null auto_increment primary key, -> name varchar(20) -> ); Query OK, 0 rows affected (0.70 sec)
テストデータの挿入
次に、INSERTコマンドを使ってサンプルデータを登録します。
mysql> insert into demo48(name) values('John Smith');
Query OK, 1 row affected (0.12 sec)
mysql> insert into demo48(name) values('John Doe');
Query OK, 1 row affected (0.12 sec)
mysql> insert into demo48(name) values('Adam Smith');
Query OK, 1 row affected (0.23 sec)
mysql> insert into demo48(name) values('David Miller');
Query OK, 1 row affected (0.14 sec)
mysql> insert into demo48(name) values('Chris Brown');
Query OK, 1 row affected (0.11 sec)登録データの確認
SELECT文でテーブルの中身を表示してみましょう。
mysql> select *from demo48;
実行結果は以下の通りです。
+----+--------------+ | id | name | +----+--------------+ | 1 | John Smith | | 2 | John Doe | | 3 | Adam Smith | | 4 | David Miller | | 5 | Chris Brown | +----+--------------+ 5 rows in set (0.00 sec)
ワイルドカードを使った部分一致検索の実行
ここで、「Smith」という文字列を含むレコードを抽出してみます。CONCAT()関数で「%」を前後に付けてLIKE句に渡すのがポイントです。
mysql> select *from demo48 where name like concat('%','Smith','%');実行すると、以下のように該当レコードのみが取得されます。
+----+------------+ | id | name | +----+------------+ | 1 | John Smith | | 3 | Adam Smith | +----+------------+ 2 rows in set (0.00 sec)
まとめ
このように、CONCAT()関数とLIKE句を組み合わせることで、SELECT文に柔軟にワイルドカードを追加できます。検索値の前後どちらかにだけ「%」を付けると前方一致・後方一致の検索も可能です。
- CONCAT('%', 値, '%'):中間一致(あいまい検索)
- CONCAT(値, '%'):前方一致
- CONCAT('%', 値):後方一致
ユーザー名や氏名などの部分一致検索を実装したい際に、ぜひ活用してください。
-
MySQLでSELECTクエリを使用してデータを挿入(INSERT)する方法
MySQLでは、INSERT文とSELECTクエリを組み合わせることで、テーブルにデータを挿入することができます。通常、SELECTは既存のテーブルからデータを取得するために使われますが、値を直接指定してINSERTを実行する際にも活用できる便利な手法です。基本構文SELECTクエリを使用してINSERTを実行する場合の構文は以下の通りです。insert into yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,...N) select yourValue1,yourValue2,yourValue3,......N;
-
MySQLでGROUP BYを使ってグループ化し合計(SUM)を求める方法
MySQLで合計を求めるには、集計関数SUM()を使用します。さらにGROUP BY句と組み合わせることで、特定のカラムごとにデータをグループ化し、それぞれのグループの合計値を取得できます。この記事では、商品名ごとに「数量 × 価格」の合計を求める例を通じて、GROUP BYとSUM()の基本的な使い方を解説します。 1. サンプルテーブルの作成 まず、以下のようにテーブルを作成します。 mysql> create table DemoTable -> ( -> ProductName varchar(20), -> ProductQuant