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

MySQLのLIKE句でユーザー変数を使う方法をわかりやすく解説

MySQLでは、CONCAT()関数を組み合わせることで、LIKE句の中でユーザー変数を利用できます。検索キーワードを動的に変更したい場合などに非常に便利なテクニックです。

基本構文

まず、ユーザー変数に検索したい値をセットし、その変数をCONCAT()関数で「%」と連結してLIKE句に渡します。構文は以下の通りです。

SET @anyVariableName = 'anyValue';
SELECT yourColumnName1, yourColumnName2, yourColumnName3, ...N
FROM yourTableName
WHERE yourColumnName LIKE CONCAT('%', @anyVariableName, '%');

サンプルテーブルの作成

それでは、実際に動きを確認するためにテーブルを作成してみましょう。以下のクエリで「UserVariableInLike」というテーブルを作成します。

mysql> CREATE TABLE UserVariableInLike
-> (
-> id INT,
-> Name VARCHAR(100),
-> Age INT
-> );
Query OK, 0 rows affected (0.83 sec)

テストデータの挿入

次に、INSERT文を使ってレコードを挿入します。

mysql> INSERT INTO UserVariableInLike VALUES(101, 'John', 23);
Query OK, 1 row affected (0.23 sec)

mysql> INSERT INTO UserVariableInLike VALUES(102, 'John Smith', 24);
Query OK, 1 row affected (0.20 sec)

mysql> INSERT INTO UserVariableInLike VALUES(103, 'Carol Smith', 23);
Query OK, 1 row affected (0.15 sec)

mysql> INSERT INTO UserVariableInLike VALUES(104, 'Johnson', 25);
Query OK, 1 row affected (0.20 sec)

mysql> INSERT INTO UserVariableInLike VALUES(105, 'Adam Smith', 26);
Query OK, 1 row affected (0.21 sec)

登録データの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> SELECT * FROM UserVariableInLike;

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

+------+-------------+------+
| id | Name | Age |
+------+-------------+------+
| 101 | John | 23 |
| 102 | John Smith | 24 |
| 103 | Carol Smith | 23 |
| 104 | Johnson | 25 |
| 105 | Adam Smith | 26 |
+------+-------------+------+
5 rows in set (0.00 sec)

LIKE句でユーザー変数を使った検索

それでは、実際にLIKE句でユーザー変数を使ってみます。まず変数@searchNameに「John」という値をセットし、あいまい検索を実行します。

mysql> SET @searchName = 'John';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT id, Name, Age FROM UserVariableInLike
WHERE Name LIKE CONCAT('%', @searchName, '%');

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

+------+------------+------+
| id | Name | Age |
+------+------------+------+
| 101 | John | 23 |
| 102 | John Smith | 24 |
| 104 | Johnson | 25 |
+------+------------+------+
3 rows in set (0.05 sec)

解説のポイント

この結果から、「John」を含む3件のレコード(John、John Smith、Johnson)が抽出されていることがわかります。ポイントは以下の通りです。

1. 変数の宣言と代入: SET @変数名 = 値; の形式で、セッション単位のユーザー変数を定義できます。

2. CONCAT()でのワイルドカード連結: LIKE句のパターンは文字列として評価されるため、CONCAT('%', @searchName, '%')のように変数の前後に「%」を連結することで、部分一致検索が実現できます。

3. 動的な検索条件: 変数の値を変えるだけで検索条件を柔軟に変更できるため、ストアドプロシージャやアプリケーションからの動的クエリにも応用できます。

このように、CONCAT()関数を活用すれば、LIKE句でもユーザー変数を問題なく扱うことができます。検索条件を動的に切り替えたいケースでぜひ活用してください。

  1. MySQLのLIKEクエリで「%」を含む列値を検索する方法【エスケープ処理の基本】

    MySQLのLIKEクエリで「%」を含む値を検索するには?MySQLでは、「%」はLIKE句におけるワイルドカードとして機能するため、そのまま検索することはできません。「%」という文字そのものを含む列値を検索したい場合は、バックスラッシュ(\)によるエスケープ処理が必要です。基本構文「%」を含む列値を検索する場合の構文は以下の通りです。select * from yourTableNamewhere yourColumnName LIKE \%%;ポイントは、検索対象の「%」の直前に「\(バックスラッシュ)」を付けることです。これにより、ワイルドカードではなく通常の文字として扱われます。実際に

  2. MySQLクエリでLIKE句を2回使う方法|OR条件で複数パターンを検索する

    MySQLでは、LIKE句を1つのクエリ内で2回以上使用することで、複数のパターンに一致するレコードを柔軟に抽出できます。この記事では、実際にテーブルを作成し、LIKE句を2回組み合わせた検索クエリの書き方を手順を追って解説します。 1. サンプルテーブルを作成する まず、検索対象となるテーブルを作成します。 mysql> create table DemoTable2009 ( Name varchar(20) ); Query OK, 0 rows affected (0.51 sec) 2. テーブルにレコードを挿入する INSERT文を使って、いくつかの名前データを登録し