今日もSQLの勉強をしていきます!
今回のテーマは、LIKEです。
1.LIKE句とは
3.否定
4.複数条件
1.LIKE句とは
「あいまい検索」、言い換えると「部分一致検索」をするための句。
通常、DB検索においては、以下のように完全一致するレコードを検索することが多い。
SELECT * FROM CUSTOMERS_TABLE WHERE ID = 'ABC00001';
が、例えば、「IDの先頭3文字である'ABC'が一致していたらOK」のように、部分一致検索をしたいこともある。
そんな時に利用できるのが、LIKE句である。
2.LIKEの基本的な使い方(ワイルドカード文字の利用基礎)
部分一致検索を実現するため、LIKE句では、ワイルドカード文字を組み合わせることになる。
SQLで利用できるワイルドカード文字は、以下2種類である。
ワイルドカード | 意味 |
---|---|
% | 0字以上の文字列 |
_ | 任意の1字 |
利用例
※以下のテーブルで説明する。
ID FRUIT_NAME
---------- ----------
1 apple
2 banana
3 orange
4 chery
ワイルドカード「%」の利用。前方一致・後方一致・部分一致など様々な使い方ができる。
sql> SELECT * FROM FRUITS_TABLE WHERE FRUIT_NAME LIKE 'ap%';
ID FRUIT_NAME
---------- ----------
1 apple
sql> SELECT * FROM FRUITS_TABLE WHERE FRUIT_NAME LIKE '%e%';
ID FRUIT_NAME
---------- ----------
1 apple
3 orange
4 chery
アンダースコア(_)の利用。文字数が分かっているときに効果的。
sql> SELECT * FROM FRUITS_TABLE WHERE FRUIT_NAME LIKE 'ch__y';
ID FRUIT_NAME
---------- ----------
4 chery
アンダースコア(_)をうまく利用すれば、5文字のものを取り出す、といった条件にすることもできる。
sql> SELECT * FROM FRUITS_TABLE WHERE FRUIT_NAME LIKE '_____';
ID FRUIT_NAME
---------- ----------
1 apple
4 chery
3.否定
LIKEには否定形も存在する。
すなわち、LIKEで示した値と部分一致しないものを検索することができる。
使い方は簡単で、NOT LIKEとすればOK。
sql> SELECT * FROM FRUITS_TABLE WHERE FRUIT_NAME NOT LIKE 'ap%';
ID FRUIT_NAME
---------- ----------
2 banana
3 orange
4 chery
4.複数条件
LIKE句でも、WHERE句と同様、ANDやORで複数の条件を利用することが可能となっている。
・AND
sql> SELECT * FROM FRUITS_TABLE WHERE FRUIT_NAME LIKE '%e%' AND FRUIT_NAME LIKE '_____';
ID FRUIT_NAME
---------- ----------
1 apple
4 chery
・OR
sql> SELECT * FROM FRUITS_TABLE WHERE FRUIT_NAME LIKE '%e%' OR FRUIT_NAME LIKE '_____';
ID FRUIT_NAME
---------- ----------
1 apple
3 orange
4 chery
5.LIKEの利用タイミング
LIKEは便利な機能である一方、意図せぬレコードまで検索に引っかかってしまう可能性もあるため、
利用する場面は慎重に検討すべきである。
例えば以下のような場面で使うことになるかもしれない。
・文字数が分かっており、機能拡張・改修が入っても変わらない可能性が低い(IDなど)ことが保証されているうえで、条件に一致するレコードを抽出したい
・データ分析やデータ監視などで、特定の文字が入っている場合にピックアップしたい
・開発/テスト環境や本番環境のデータ調査などで、調べたい内容に近いレコードを検索する
いずれにせよ、どういった目的で、どのようなレコードを検索したいのかを明らかにしたうえで、
LIKE句の利用を検討する必要がある。
(もちろんLIKEに限った話ではなく、どんなコードを書くとしても同じだが。)
今回は以上!