一部の文字列を含むデータを探したい場合など、ワイルドカードを使って あいまい検索するには「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」でワイルドカードを使ったパターンに一致していないデータを検索することができる。