【SQL】LIKE条件の書き方:サンプル多数あり
ここではORACLEデータベースのSQLで、LIKE演算子を条件に指定するときの書き方を紹介します。
LIKE演算子を使うことで、列の値から文字列を検索し、該当するレコードを抽出することが出来ます。
SELECT文のサンプルは↓で多数紹介していますので参考にしてください。
>>【SQL】SELECT文の書き方:サンプル多数あり
本記事の内容
・LIKE演算子の基本構文を解説します
・ワイルドカードについて解説します
・SQLサンプルを紹介します
この記事を書いている私は、10年近くのキャリアのあるシステムエンジニアです。
スクールや自己学習、現場で積んだ経験を元に解説していきますのでぜひ参考にしてください。
LIKE演算子の基本構文
LIKE演算子は、WHERE句の条件として使います。
LIKE演算子を使った基本的な構文は次のとおりです。
SELECT 列名 FROM テーブル名 WHERE 列名 LIKE '検索値';
ワイルドカードとは
ここLIKE演算子を使うときには、ワイルドカードと言う正規表現を使います。
ワイルドカードとは、曖昧検索を行うときに、任意の文字の代わりに指定する文字のことです。
ワイルドカードは2種類あり、「%」が0文字以上の任意の文字、「_」が任意の1文字を表します。
具体的な使い方はサンプルを通して解説していきます。
LIKEを使ったSQLサンプル
ここからはLIKE演算子を使ったSQLのサンプルを紹介します。
あいまい検索や部分一致検索
LIKE演算子を使うことで、部分一致検索やあいまい検索を行うことが出来ます。
あいまい検索も部分一致検索もほぼ同じ意味で使われます。
あいまい検索とは、特定の文字を含むデータを検索する場合によく使います。
◆あいまい検索:例1
次のサンプルではnameに”中”という文字列が含まれるレコードを抽出しています。この場合、「中田」さんや「田中」さん、「中島」さんが検索結果に抽出されます。
SELECT * FROM tab1 WHERE name LIKE '%中%';
◆あいまい検索:例2
次のサンプルではaddressに”港区”という文字列が含まれるレコードを抽出しています。この場合、住所が「港区」になっているレコードを抽出できます。
SELECT * FROM tab1 WHERE address LIKE '%港区%';
前方一致検索
列の値を前方一致で検索する方法です。
例えば、一文字目に”前”という文字を含むレコードの検索や、先頭に「田中」と言う文字を含むレコードを抽出する場合に使えます。
◆一文字目の前方一致検索
次のサンプルでは、1文字目に”前”という文字を含むレコードを抽出します。例えば、「前田」さんや「前川」さんなどが抽出されます。
SELECT * FROM tab1 WHERE name LIKE '前%';
◆先頭の文字列の前方一致検索
次のサンプルでは、先頭に”田中”という文字を含むレコードを抽出します。例えば、「田中幸雄」さんや「田中英雄」さんなど、”田中”という文字が先頭に含まれるレコードが抽出されます。
SELECT * FROM tab1 WHERE name LIKE '田中%';
n文字目の文字列のあいまい検索
ある列のn番目の値で、対象の文字列を検索する方法です。
◆2文字目のあいまい検索
次のサンプルでは、2文字目が”木”という文字のレコードを抽出しています。例えば、「鈴木」さんや「茂木」さんなどのレコードが抽出されます。
SELECT * FROM tab1 WHERE name LIKE '_木%';
◆3文字目のあいまい検索
次のサンプルでは、3文字目が”川”という文字のレコードを抽出しています。例えば、「四十川」さんや「合瀬川」さんなどのレコードが抽出されます。
SELECT * FROM tab1 WHERE name LIKE '__川%';
完全一致検索
LIKE演算子を使うことで完全一致検索を行うことが出来ます。
◆完全一致検索の例
検索値に文字列を指定することで、検索値と完全に一致するレコードを抽出します。サンプルでは、col1の値がtestという文字列を一致する行を抽出します。
SELECT * FROM tab1 WHERE col1 LIKE 'test';
完全一致検索は、↓のように=演算子で記述することが多いので、LIKEでコーディングする機会は少ないかもしれません。
SELECT * FROM tab1 WHERE col1 = 'test';
ワイルドカード文字の検索
あいまい検索でワイルドカードとして扱う文字を、検索条件の文字としたい場合にはESCAPEを使います。
・「_」アンダースコアを含むデータの検索
ESCAPE文字をアンダースコアの直前に持ってきます。
・「%」パーセントを含むデータの検索
ESCAPE文字をパーセントの直前に持ってきます。
--「_」アンダースコアを含むデータの検索
SELECT col1,col2,col3 FROM tab1 WHERE col1 LIKE '%\_%' ESCAPE '\';
--「%」パーセントを含むデータの検索
SELECT col1,col2,col3 FROM tab1 WHERE col1 LIKE '%\%%' ESCAPE '\';
NOT LIKE
LIKEの前にNOTを付けることで、指定した条件に一致しないデータを検索できます。
次のSQLでは、COL1に’test’という文字を含まないレコードを検索しています。
SELECT col1,col2,col3 FROM tab1 WHERE col1 NOT LIKE '%test%';
まとめ
最後までお読み頂きありがとうございます。
SQLのLIKE検索はよく使う演算子なので、きちんと使い方を身に付けましょう。
この他にも、SELECT文には様々な機能や使い方があります。
詳しくは「【SQL】SELECT文の書き方:サンプル多数あり」で解説していますのでぜひ参考にしてください。