MySQLのLIKE演算子とCONCAT関数を使って複数のカラムを横断して同じ値を検索する方法
MySQLでは、LIKE演算子とCONCAT()関数を組み合わせることで、複数のカラムを連結した文字列に対して部分一致検索を行うことができます。これにより、例えば「名前」と「科目」といった別々のフィールドにまたがる値を、1つの条件でまとめて検索できるようになります。
ここでは、実際にテーブルを作成し、複数のカラムにわたる検索を行う手順を具体的なサンプルコードとともに解説します。
サンプルテーブルの作成
まず、学生名と科目を格納するテーブルを作成します。
mysql> create table DemoTable
-> (
-> StudentName varchar(20),
-> StudentSubject varchar(20)
-> );
Query OK, 0 rows affected (0.58 sec)
テストデータの挿入
続いて、INSERT文を使ってレコードを挿入します。同じ名前の学生が複数の科目を受講しているデータを用意しました。
mysql> insert into DemoTable values('John','MySQL');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('Adam','MySQL');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('John','Java');
Query OK, 1 row affected (0.34 sec)
mysql> insert into DemoTable values('Carol','Java');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('John','MongoDB');
Query OK, 1 row affected (0.12 sec)登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+-------------+----------------+
| StudentName | StudentSubject |
+-------------+----------------+
| John | MySQL |
| Adam | MySQL |
| John | Java |
| Carol | Java |
| John | MongoDB |
+-------------+----------------+
5 rows in set (0.00 sec)
LIKE演算子で複数カラムを結合して検索するクエリ
ここからが本題です。CONCAT()関数で「StudentName」と「StudentSubject」の2つのカラムをスペース区切りで連結し、その結果に対してLIKE演算子で「John MySQL」というパターンを検索します。
mysql> select *from DemoTable
-> where concat(StudentName,' ',StudentSubject)
-> like '%John MySQL%';
実行すると、次の出力が得られます。
+-------------+----------------+
| StudentName | StudentSubject |
+-------------+----------------+
| John | MySQL |
+-------------+----------------+
1 row in set (0.00 sec)
このように、「John」という名前かつ「MySQL」という科目を持つレコードだけが正しく抽出されました。あくまで「John」単独や「MySQL」単独ではなく、両方のカラムを連結した文字列全体に対するパターンマッチングが行われている点がポイントです。
応用のヒント
連結時の区切り文字(上記の例では半角スペース)は任意に変更できます。また、%ワイルドカードの位置を調整すれば前方一致・後方一致・部分一致など柔軟な検索が可能です。ただし、先頭に%を付けるとインデックスが利用されずパフォーマンスが低下する場合があるため、大規模なテーブルでは注意が必要です。
-
MySQLで複数のLIKE演算子をORDER BYと組み合わせる方法
MySQLでは、複数のLIKE演算子をORDER BY句の中で組み合わせることで、指定したキーワードにより多く一致するレコードを優先的に並べ替えることができます。このテクニックは、LIKE演算子が「一致すれば1」「一致しなければ0」を返すという性質を利用しています。各条件の結果を足し合わせることで一致数を計算し、降順(DESC)にソートすることで、関連度の高いレコードを上位に表示できるのです。以下は、複数のLIKE演算子をORDER BYと組み合わせて実装する際の基本構文です。select *from yourTableName order by ( yourColumnName li
-
動的配列を活用したMySQLのLIKEクエリ実装方法を解説
動的配列に対するLIKEクエリの基本構文 MySQLでカンマ区切りの複数値(いわゆる動的な配列)が格納されたカラムに対してLIKEクエリを実行したい場合、LIKE句とワイルドカード「%」を組み合わせることで部分一致検索が可能です。基本となる構文は以下の通りです。 select *from yourTableName where yourColumnName2 like %yourValue% order by yourColumnName1 asc l