WHERE句を覚えても常にA = Bのような完全一致の書き方では取得できない値が出てくると思います。
データベースの中から特定の値が前方・後方・部分的に入っている項目を検索することができるLIKE句について学んでいきましょう。
動作環境
SQL FIDDLEでMySQL5.6、PostgreSQL9.6、SQLiteで動作確認しました。
下記文章は主にPostgreSQLで仕様で調べています。
LIKE句とは
LIKE句とは英語のLIKEの意味である「〜のような」という意味のように、特定の値が入っている項目を検索(あいまい検索)して取り出す際に使用されます。
※LIKE検索と言われることもあります。
構文
SELECT文の前方一致の例
SELECT 列名 FROM テーブル名 WHERE 列名 LIKE ‘コーラ%’;
「%」はワイルドカードとして使われています。
ワイルドカードとは
ワイルドカード(WILD CARD)とは、トランプでいうジョーカーのように、何にでも使えるカードという意味があります。おそらくそこから転じてコンピュータ界でも検索時に任意の文字(列)の代用にされる記号のことをワイルドカードと言います。
SQLでは「%」をよく見かけますが、まれに「_」(アンダースコア)も見かけるかもしれません。
意味は以下になります。
- 「%」0文字以上の任意の文字列を表しています。
- 「 _ 」任意の1文字を表しています。
※この記事では主に「%」を使って説明していきます。
LIKE句で前方一致・後方一致・部分一致してみよう
それでは実際にどのようにつかわれているか見ていきましょう。
準備
以下のテーブルがあるとします。
itemid | itemname | quantity |
---|---|---|
1 | コーラ | 30 |
2 | コーラゼロ | 25 |
3 | ダイエットコーラ | 30 |
4 | エナジーコーラ | 15 |
5 | お茶 | 20 |
以下練習用テーブル作成コードです。
— CREATE文
CREATE TABLE item (
ItemID numeric(8, 0) unique not null,
ItemName character varying (20) not null,
Quantity numeric(8, 0),
primary key(ItemID)
);
— INSERT文
insert into item
values(0001, ‘コーラ’, 30),
(0002, ‘コーラゼロ’, 25),
(0003, ‘ダイエットコーラ’, 30),
(0004, ‘エナジーコーラ’, 15),
(0005, ‘お茶’, 20);
準備したテーブルを使って、LIKE句を使ってみましょう。
LIKE句で前方一致してみよう!
LIKE句を使用して、ItemNameがコーラから始まるものを取り出してみましょう。
サンプルコード
SELECT * FROM item WHERE ItemName LIKE ‘コーラ%’;
ワイルドカード「%」をコーラの後ろにつけます。
■ 結果
itemid | itemname | quantity |
---|---|---|
1 | コーラ | 30 |
2 | コーラゼロ | 25 |
ItemNameがコーラで始まる行を取得できました。
LIKE句で後方一致してみよう!
LIKE句を使用して、ItemNameがコーラで終わるものを取り出してみましょう。
サンプルコード
SELECT * FROM item WHERE ItemName LIKE ‘%コーラ’;
ワイルドカード「%」をコーラの前につけます。
■ 結果
itemid | itemname | quantity |
---|---|---|
1 | コーラ | 30 |
3 | ダイエットコーラ | 30 |
4 | エナジーコーラ | 15 |
ItemNameがコーラで終わる行を取得できました。
LIKE句で部分一致してみよう!
LIKE句を使用して、ItemNameにコーラを含む項目を取り出してみましょう。
サンプルコード
SELECT * FROM item WHERE ItemName LIKE ‘%コーラ%’;
ワイルドカード「%」をコーラの前後につけます。
■ 結果
ItemID | ItemName | Quantity |
---|---|---|
1 | コーラ | 30 |
2 | コーラゼロ | 25 |
3 | ダイエットコーラ | 30 |
4 | エナジーコーラ | 15 |
ItemNameにコーラが含まれる行を取得できました。
LIKE句で複数箇所一致
LIKE句を使用して、ItemNameがエナジーで始まりラで終わる項目を取り出してみましょう。
SELECT * FROM item WHERE ItemName LIKE ‘エナジー%’ and ItemName Like ‘%ラ’;
■ 結果
ItemID | ItemName | Quantity |
---|---|---|
4 | エナジーコーラ | 15 |
エナジーコーラで検索したらいいのにという少しおかしな例になっていますが、複数指定できるよという例でした。
応用 Not Like句
LIKE句の使い方がわかったところで、NOT LIKE句も合わせて覚えてしまいましょう。
NOT LIKE句はLIKE句を否定する時に使用します。
サンプルコード
コーラを含まない項目を取り出してみましょう。
SELECT * FROM item WHERE ItemName Not LIKE ‘%コーラ%’;
■ 結果
ItemID | ItemName | Quantity |
---|---|---|
5 | お茶 | 20 |
おわり
Like句を使えると検索機能とか実装できるような気がしてきますね。