MySQLでLIKEの書き方

MySQLでLIKEの書き方

MySQLでLIKEを使用することで、部分一致検索やパターンマッチを実現できます。
LIKEは、特定の文字列やパターンに合致するデータを取得する際に使われます。
一般的に、SELECT文と一緒に使われ、ワイルドカードと組み合わせて柔軟な検索を行うことが可能です。
ここでは、LIKEの基本的な使い方や、ワイルドカード、オプション、注意点について説明します。

基本的な構文

LIKEはSELECT文内で条件を指定する際に使います。
例えば、特定の名前に部分一致するレコードを取得する場合、次のようなSQL文を使います。

SELECT * FROM table_name WHERE column_name LIKE 'pattern';

ここで、table_nameは検索対象のテーブル名、column_nameは検索対象のカラム名、patternは検索したい文字列やパターンを指定します。
LIKEでは、ワイルドカードを使用してパターンを作成します。

ワイルドカードの使用

MySQLのLIKEで使用されるワイルドカードは2つあります。

1. %(パーセント)
任意の文字列(0文字以上)にマッチします。

- LIKE 'a%': 「a」で始まる任意の文字列にマッチします(例: "apple", "air", "ant"など)。
- LIKE '%b': 「b」で終わる任意の文字列にマッチします(例: "web", "grab", "dab"など)。
- LIKE '%c%': 「c」を含む任意の文字列にマッチします(例: "abc", "cat", "civic"など)。

2. _(アンダースコア)
任意の1文字にマッチします。

- LIKE 'a_': 「a」で始まり、2文字目が任意の1文字である文字列にマッチします(例: "an", "ab"など)。
- LIKE '_b': 2文字目が「b」である文字列にマッチします(例: "ab", "cb", "db"など)。

大文字・小文字の区別

MySQLのLIKEは、デフォルトでは大文字と小文字を区別しない動作をします。
例えば、LIKE 'a%'は「apple」も「Apple」も両方マッチします。
ただし、文字セットや照合順序によってはこの動作が異なる場合があります。
大文字と小文字を区別して検索したい場合は、BINARYキーワードを使います。

SELECT * FROM table_name WHERE BINARY column_name LIKE 'pattern';

この例では、LIKE 'A%'は「Apple」にマッチしますが、「apple」にはマッチしません。

エスケープ文字

LIKEを使って検索する文字列にワイルドカードとして使われる%や_が含まれる場合、それらをエスケープする必要があります。
エスケープするには、ESCAPEキーワードを使用します。

SELECT * FROM table_name WHERE column_name LIKE '50\%' ESCAPE '\';

このクエリは、「50%」という文字列を含むレコードを検索します。
\はエスケープ文字として指定され、%をリテラル文字として扱います。

複数条件での使用

LIKEは他の条件文(例: AND, OR)と組み合わせて使用することも可能です。
複数のパターンに一致するかどうかを確認したい場合は、ORを使います。

SELECT * FROM table_name WHERE column_name LIKE 'A%' OR column_name LIKE 'B%';

このクエリは、column_nameが「A」または「B」で始まるデータを取得します。
また、ANDを使えば複数の条件を同時に満たすデータを取得できます。

パフォーマンスへの影響

LIKEを使用する際の注意点として、パフォーマンスへの影響があります。
特に、先頭に%を使ったパターン(例: LIKE '%pattern')は、インデックスを利用できず、フルテーブルスキャンが行われるため、検索が遅くなることがあります。
パフォーマンスが重要なシステムでは、LIKEの使用を慎重に検討し、可能であればインデックスを活用できる検索方法を検討するべきです。

正規表現との違い

MySQLでは、LIKEはシンプルなパターンマッチングを提供しますが、正規表現のように複雑なパターンマッチはできません。
もし、より複雑なパターンマッチが必要な場合は、MySQLのREGEXP関数を使用することもできます。
例えば、次のように正規表現でパターンを検索できます。

SELECT * FROM table_name WHERE column_name REGEXP '^A.*B$';

REGEXPを使えば、より柔軟な検索が可能ですが、パフォーマンスに影響を与える場合があるため、使用する際は注意が必要です。

まとめ

MySQLのLIKEは、部分一致検索やパターンマッチングに便利なツールです。
%や_などのワイルドカードを使用して柔軟な検索を行うことができますが、パフォーマンスに注意しながら使用することが重要です。
エスケープ文字や大文字・小文字の区別など、特定のケースに対応するオプションも活用できます。
また、複雑な検索にはREGEXPの使用を検討するのも一つの方法です。