MySQL の LIKE

ここでは MySQL の LIKE と NOT LIKE 演算子についてご説明します。

サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。

MySQL の LIKE 演算子

MySQL の LIKE 演算子は、パターンにマッチする時に 1 (True) を返す演算子です。

WHERE 句 など、boolean(ブーリアン)を返す式が必要な箇所で LIKE 演算子を使うことによって、パターンにマッチする値をもつレコードを取得することができます。

MySQL の LIKE 演算子の基本

MySQL の LIKE 演算子は次のような構文で使用し、[A] が指定したパターンにマッチする場合は 1 (TRUE) を、そうでなければ 0 (FALSE) を返します。

[A] LIKE パターン [ESCAPE 'エスケープ文字']

パターンの部分で一番良く使うワイルドカード文字は % で、0 以上の文字列にマッチします。

ワイルドカード文字 _(アンダースコア)は、任意の 1 文字にマッチします。


[ESCAPE 'エスケープ文字'] の部分はオプショナルです。

エスケープ文字は、値の中に % や _ が入っている時にマッチさせたい時に使えます。

デフォルトのエスケープ文字は \ で、例えば % 1 文字にマッチさせたい時は \% のように指定します。

他の文字をエスケープ文字列にしたい時に ESCAPE 'エスケープ文字' でエスケープ文字を指定します。


MySQL の LIKE で 前方一致検索

LIKE 演算子を使って、前方一致で検索したい時は [A] LIKE '文字列%' のように指定します。

それでは LIKE 演算子を使って前方一致検索をしてみましょう。


次のような students テーブルがあります。

MySQL の LIKE 1


この students テーブルから first_name が Y で始まる学生のデータを取得したい時は次のようにできます。

SELECT 	* 
FROM 	students
WHERE 	first_name LIKE 'Y%';

[実行結果]

MySQL の LIKE 2

first_name が Y で始まる学生のデータが取得できていますね。

MySQL の LIKE で 後方一致検索

LIKE 演算子を使って、後方一致で検索したい時は [A] LIKE '%文字列' のように指定します。

例えば、students テーブルから first_name が a で終わる学生のデータを取得したい時は次のようにできます。

SELECT 	* 
FROM 	students
WHERE 	first_name LIKE '%a';

[実行結果]

MySQL の LIKE 3

first_name が a で終わる学生のデータが取得できています。


MySQL の LIKE で 部分一致検索

LIKE 演算子を使って、部分一致で検索したい時は [A] LIKE '%文字列%' のように指定します。

例えば、students テーブルから first_name に u が入っている学生のデータを取得したい時は次のようにできます。

SELECT 	* 
FROM 	students
WHERE 	first_name LIKE '%u%';

[実行結果]

MySQL の LIKE 4

first_name に u が入っている学生のデータが取得できていますね。


MySQL の NOT LIKE 演算子

MySQL の NOT LIKE 演算子は LIKE 演算子と反対で、パターンにマッチしない時に 1 (True) を返す演算子です。

[A] NOT LIKE パターン [ESCAPE 'エスケープ文字']

例えば、students テーブルから first_name に u が入っていない学生のデータを取得したい時は次のようにできます。

SELECT 	* 
FROM 	students
WHERE 	first_name NOT LIKE '%u%';

[実行結果]

MySQL の LIKE 5

first_name に u が入っていない学生のデータが取得できています。


NOT LIKE 演算子を使う時は、[A] が NULL の時はパターンにマッチしていなくても、評価結果は 1 (True) にはならず NULL になるのでご注意ください。

例えば、middle_name に u が入っていない学生のデータを取得したいとします。

ですが、次のように WHERE 句 で指定してしまうと、全員 middle_name に u が入ってないのに、middle_name が NULL のため、結果セットは 0 レコードになります。

SELECT 	* 
FROM 	students
WHERE 	middle_name NOT LIKE '%u%';

[実行結果]

MySQL の LIKE 6


こういう時は、NOT LIKE の条件式に続けて OR middle_name IS NULL を追加するか、 IFNULL(middle_name, '') や COALESCE(middle_name, '') などで NULL の時は空白文字列に変換してから NOT LIKE を使う必要があります。


以上、MySQL の LIKE と NOT LIKE 演算子についてご説明しました。

© 2024 MySQL 入門