【SQL】LIKEの使い方いろいろ | 若手エンジニアのブログ

若手エンジニアのブログ

文系出身の若手女子エンジニアによる技術ブログ。
日々の経験や学びをアウトプットするためにブログを書いています。
バックエンド(Java+SpringFramework)を経てインフラエンジニアになりました。
今は育休中につき、本で勉強したことを中心にアウトプットしています。

今日もSQLの勉強をしていきます!

今回のテーマは、LIKEです。

 

1.LIKE句とは

2.LIKEの基本的な使い方(ワイルドカードの利用基礎)

3.否定

4.複数条件

5.LIKEの利用タイミング

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に限った話ではなく、どんなコードを書くとしても同じだが。)

 

今回は以上!