SQL SELECT 前方一致、あいまい検索(like)

SQLのselect文のlikeで前方一致やあいまい検索するサンプルです。

目次

selectのlike 前方一致で検索する
  あいまい検索/部分検索で検索する
  後方一致で検索する
  like + 否定
  アンダスコア(_)で任意の1文字を指定する
  エスケープする(検索したい文字列に%や_があるとき)

前方一致で検索する

select * from テーブル名
where 項目名 like '値%'

select文の条件にlike 値%とすると前方一致で検索できます。

以下のテーブルがあるとします。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato

SQL

上記テーブルに対して条件にlike 値%を指定します。

select * from Syain
where romaji like 'tana%'

2行目は、likeと%を指定しています。
項目「romaji」にtanaで始まる行を抽出します。

結果

結果は、以下のとおりです。

syainテーブル
id name romaji
2 田中 tanaka

あいまい検索/部分検索で検索する

select * from テーブル名
where 項目名 like '%%'

select文の条件にlike %値%とするとあいまい検索/部分検索できます。

以下のテーブルがあるとします。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato

SQL

上記テーブルに対して条件にlike %値%を指定します。

select * from Syain
where romaji like '%a%'

2行目は、likeと%2つを指定しています。
項目「romaji」にaが含まれる行を抽出します。

結果

結果は、以下のとおりです。

syainテーブル
id name romaji
2 田中 tanaka
3 佐藤 sato

後方一致で検索する

select * from テーブル名
where 項目名 like '%値'

select文の条件にlike %値とすると後方一致で検索できます。

以下のテーブルがあるとします。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato

SQL

上記テーブルに対して条件にlike %値を指定します。

select * from Syain
where romaji like '%ki'

2行目は、likeと%を指定しています。
項目「romaji」にkiで終わる行を抽出します。

結果

結果は、以下のとおりです。

syainテーブル
id name romaji
1 鈴木 suzuki

like + 否定

select * from テーブル名
where 項目名  not like '(%)値(%)'

select文の条件にnot likeを使用とするとlikeの否定で検索できます。

以下のテーブルがあるとします。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato

SQL

上記テーブルに対して条件にnot like %値%を指定します。

select * from Syain
where romaji not like '%a%'

2行目は、not likeと%を指定しています。
項目「romaji」にaが含まれない行を抽出します。

結果

結果は、以下のとおりです。

syainテーブル
id name romaji
1 鈴木 suzuki

アンダスコア(_)で任意の1文字を指定する

select * from テーブル名
where 項目名  like '(_)値(_)'

select文の条件にlikeとアンダスコア(_)を使用する場合、アンダスコア_は任意の1文字を表します。

以下のテーブルがあるとします。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato

SQL

上記テーブルに対して条件にlike 値_を指定します。

select * from Syain
where romaji like '%t_'

2行目は、likeと%と_を指定しています。
項目「romaji」に任意の文字のあとにtがあり、その後に任意の一文字だけある行を抽出します。

結果

結果は、以下のとおりです。

syainテーブル
id name romaji
3 佐藤 sato

1行目のtanakaは抽出されません。

エスケープする(検索したい文字列に%や_があるとき)

select * from テーブル名
where 項目名  like '(エスケープ文字%or_)値(エスケープ文字%or_)' escape 'エスケープ文字'

likeの後にescapeを使用すると指定した文字の後はエスケープされます。
検索したい文字列に%や_があるときに使用します。

以下のテーブルがあるとします。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 %sato

SQL

上記テーブルに対して条件にlikeとescapeを指定します。

select * from Syain
where romaji like '\%%' ESCAPE '\';

2行目は、escapeの文字として\を指定しています。
エスケープ文字は\がよく使われますが、その他の文字でも指定可能です。

\%%となっているので、1つめの%はエスケープされ%という文字で検索されます。
2つめの%はあいまい検索の機能として動作します。

結果

結果は、以下のとおりです。

syainテーブル
id name romaji
3 佐藤 %sato

関連の記事

SQL SELECT 複数の値を条件にする(in演算子)

△上に戻る