【MySQL】ワイルドカードを使って あいまい検索する(like や not like の使い方)

一部の文字列を含むデータを探したい場合など、ワイルドカードを使って あいまい検索するには「LIKE」句や「NOT LIKE」句を使います。

ここでは MySQLコマンド「LIKE」や「NOT LIKE」の具体的な使い方を解説していきます。

 

「LIKE」や「NOT LIKE」の基本

「LIKE」や「NOT LIKE」は、「WHERE」などと組み合わせて条件式で使います。

 

「LIKE」のコマンド例

これで指定したカラム名の値が、ワイルドカードを使ったパターンに一致しているデータを検索できます。

SELECT * FROM テーブル名 WHERE カラム名 LIKE パターン;

 

「NOT LIKE」のコマンド例

これで指定したカラム名の値が、ワイルドカードを使ったパターンに一致していないデータを検索できます。

SELECT * FROM テーブル名 WHERE カラム名 NOT LIKE パターン;
メモ

SELECT 文の詳しい使い方はこちら

 

ワイルドカードとして使える文字

% 任意の0文字以上の文字列
_ 任意の1文字

 

先頭に指定した文字列が含まれるデータを検索する

実際にMySQLサーバーに接続し、動作を確認してみましょう。

 

あらかじめ「test」データベースの「users」テーブルに、以下のようにデータが保存されている例で進めていきます。

name age
佐藤 21
田中 21
山田 32
佐々木 28

データを保存するコマンド例

CREATE DATABASE test;
USE test;
CREATE TABLE users (name VARCHAR(100), age INT);
INSERT INTO users (name, age) VALUES ('佐藤', 21);
INSERT INTO users (name, age) VALUES ('田中', 21);
INSERT INTO users (name, age) VALUES ('山田', 32);
INSERT INTO users (name, age) VALUES ('佐々木', 28);
メモ

CREATE DATABASE 文の詳しい使い方はこちら

USE 文の詳しい使い方はこちら

CREATE TABLE 文の詳しい使い方はこちら

INSERT INTO 文の詳しい使い方はこちら

 

それでは「name」カラムの値の先頭に「田」が含まれるデータを検索してみましょう。コマンドは以下。

SELECT * FROM users WHERE name LIKE '田%';

 

コマンドを実行すると、以下のように結果が表示されました。

 

指定した文字列が含まれるデータを検索する

今度は「name」カラムの値のどこかに「田」が含まれるデータを検索してみましょう。コマンドは以下。

SELECT * FROM users WHERE name LIKE '%田%';

コマンドを実行すると、以下のように結果が表示されました。

 

先頭に指定した文字を含む2文字のデータを検索する

次は「name」カラムの値の先頭に「佐」が含まれる2文字のデータを検索してみましょう。コマンドは以下。

SELECT * FROM users WHERE name LIKE '佐_';

 

コマンドを実行すると、以下のように結果が表示されました。

3文字の「佐々木」のデータは該当しませんでした。

 

さまざまなワイルドカードの使い方

ワイルドカードを使うと、以下のように さまざまなパターンを作ることができます。

田% 先頭に「田」がつく文字列
%田 末尾に「田」がつく文字列
%田% どこかに「田」がつく文字列
佐_ 先頭に「佐」がつく 2文字の文字列
佐__ 先頭に「佐」がつく 3文字の文字列
佐_木 先頭に「佐」、末尾に「木」がつく 3文字の文字列
佐_%木 先頭に「佐」、末尾に「木」がつく 3文字以上の文字列
___ 3文字の文字列

 

ここまでが「LIKE」や「NOT LIKE」の基本!

理解をさらに深めたい方は以下からの内容もご覧ください。

 

ワイルドカードを文字として使う

例えば 先頭に「%」を含む文字列を検索したい場合など、ワイルドカードを文字として使いたい場合は、手前に \ をつけてエスケープ処理を行います。

 

「ratio」カラムの値の末尾に「%」が含まれる2文字のデータを検索するコマンド例

SELECT * FROM test WHERE ratio LIKE '_\%';

 

ESCAPE を使って、エスケープ文字を \ 以外にすることもできます。

エスケープ文字を「|」にするコマンド例

SELECT * FROM test WHERE ratio LIKE '_|%' ESCAPE '|';

 

パターンで指定した文字列の大文字と小文字を区別する

パターンで指定した文字列は、通常、大文字と小文字が区別されません。

以下のように「BINARY」演算子を使うと、大文字と小文字を区別することができます。

SELECT * FROM users WHERE name LIKE BINARY 'Yamada';

 

まとめ

以上、MySQLコマンド「LIKE」や「NOT LIKE」の使い方でした!

 

ここまでの内容をまとめておきます。

  • 「LIKE」でワイルドカードを使ったパターンに一致しているデータを検索することができる。
  • 「NOT LIKE」でワイルドカードを使ったパターンに一致していないデータを検索することができる。