【SQL】LIKE句を使ったあいまい検索について解説します。
はじめに
LIKE句とは、あいまい検索をする際に使われるクエリです。
名前や住所など、完全一致ではなく一部分が合致するデータを探し出したい時に有効です。
例えば、「東京」というキーワードを含む顧客を探したい場合、完全一致なら = を使いますが、LIKE句を使えば「東京都」「東京タワー」などもヒットします。
本記事では、そんなLIKE句について初心者向けに解説します。
LIKE句の使い方
基本構文
LIKE句は、SELECT文と組み合わせて使用され、特定のパターンを持つデータを検索します。
基本的な構文は以下の通りです。
SELECT 列名 FROM テーブル名 WHERE 列名 LIKE 'パターン';
LIKE句を使うことで、
- 前方一致検索
- 後方一致検索
- 部分一致検索
- 完全一致検索
を行うことができます。
前方一致検索
まずサンプルデータを作っていきます。
(この後紹介する例は全て下記サンプルデータを前提に紹介します)
CREATE TABLE users(id integer, name varchar(100));
INSERT INTO users(id, name) values(1, "田中");
INSERT INTO users(id, name) values(2, "田中 太郎");
INSERT INTO users(id, name) values(3, "田中 一郎");
INSERT INTO users(id, name) values(4, "加藤 太郎");
INSERT INTO users(id, name) values(5, "佐藤 太郎");
INSERT INTO users(id, name) values(6, "田中 二郎");
このテーブルから「田中」で始まる名前のデータを取得したい場合、下記のようにLIKE句を使って取得することができます。
SELECT * FROM users WHERE name LIKE '田中%';
出力結果は下記の通りです。
id name
1 田中
2 田中 太郎
3 田中 一郎
6 田中 二郎
上記の例のように、パターンを指定するために特定のワイルドカードを使用することができます。
主に使用されるワイルドカードは下記の2つです。
- パーセント記号(%): 任意の文字列(0文字以上)を示します。
- アンダースコア(_): 任意の一文字を示します。
これらのワイルドカードを組み合わせることにより、多彩なパターンの検索が可能になります。
後方一致検索
次に「太郎」で終わる名前のデータを取得したい場合を見てみましょう。
「太郎」で終わる、つまり後方一致検索を行いたいので、「太郎」の前に「%」を付けて実行してみます。
SELECT * FROM users WHERE name LIKE '%太郎';
出力結果は下記の通りです。
id name
2 田中 太郎
4 加藤 太郎
5 佐藤 太郎
「太郎」で終わる名前を取得することができました。
部分一致検索
特定の文字列が入っているデータを取得したい場合でも、LIKE句を使うことで実現することができます。
例えば、名前に「藤」が入っているデータだけを取得したい場合は、次のように実行します。
SELECT * FROM users WHERE name LIKE '%藤%';
出力結果は下記の通りです。
id name
4 加藤 太郎
5 佐藤 太郎
「藤」が入っている加藤さんと佐藤さんだけを取得することができました。
完全一致検索
次に完全一致検索です。
あまりLIKE句を使って行うことはないかもしれませんが、ワイルドカードを付けないことで実現することができます。
SELECT * FROM users WHERE name LIKE '田中';
出力結果は下記の通りです。
id name
1 田中
否定形
最後にLIKE句の否定形についても紹介します。
「田中」で始まらない名前の人を取得したい場合、次のように実行します。
SELECT * FROM users WHERE name NOT LIKE '田中%';
出力結果は下記の通りです。
id name
4 加藤 太郎
5 佐藤 太郎
「NOT LIKE」とすることで、先ほど紹介した前方一致検索で取得した結果とは逆の結果が得られたことがわかります。
おわりに
いかがでしたでしょうか?
LIKE句を使いこなすことで、様々なパターンの検索を実現することができます。
本記事を参考にぜひJOIN句を使ってみてください。