バナー画像

曖昧検索をするためにはLIKE句を使用しますが、複数キーワードを指定したい場合もあるかと思います。

そこで今回はこのLIKE句について「基本的な使い方~複数検索する場合の方法」までをわかりやすく徹底解説してみたいと思います。

LIKE句とは?

LIKE句は曖昧検索を行う場合に使用するクエリとなります。

検索条件の前後またはその両方にワイルドカード文字を挿入することで、「○○○を含む文字列」を検索するという処理が可能となります。

データベースで検索をかける場合には、ピンポイントで「完全一致検索」よりも、前後または一部の文字列から検索する「部分一致検索」の方が圧倒的に多く使われます。

ポテパンダの一言メモ

ワイルドカードとは?

ワイルドカードとは「%」や「_」などの記号を使い、任意のパターンに一致する文字列を置き換えたものを指します。

皆さんもよく見かけるものでは「アスタリスク(*)」が挙げられます。

SQLで使用するワイルドカードは上記二つ(「%」と「_」)で、これらの意味は次の通りとなります。

 

「%」 ───── ゼロ文字以上の文字列。簡単に言い換えると何かしらの文字が一つ以上ある状態

「_」 ───── 任意の1文字

LIKE句の基本的記述について

それでは早速、LIKE句の使い方について解説していきます。

LIKE句は次のように使います。

SELECT [表示要素] FROM [テーブル名] WHERE [要素名] LIKE [曖昧検索の条件];

LIKE句は検索方法の一つですので、基本的にはWHEREの後ろに追加で記述します。

では次は検索条件の指定方法についてです。

検索条件の指定方法

検索条件の指定は大きく分けると「完全一致検索」「前方一致検索」「後方一致検索」「部分一致検索」の4つがあります。

これらの検索の詳細については以下の通りです。

前方一致検索

SELECT sample_column FROM sample_table WHERE sample_column LIKE "sample%";

「前方一致」を目的としているため、ワイルドカードは検索条件の最後に付けます。

結果として、テーブル内の指定カラムに入っているデータから「sample○○○」のような文字列を全て取得します。

後方一致検索

SELECT sample_column FROM sample_table WHERE sample_column LIKE "%sample";

「後方一致」を目的としているため、ワイルドカードは検索条件の最初に付けます。

結果として、テーブル内の指定カラムに入っているデータから「○○○sample」のような文字列を全て取得します。

部分一致検索

SELECT sample_column FROM sample_table WHERE sample_column LIKE "%sample%";

「部分一致」を目的としているため、ワイルドカードは検索条件の前後に付けます。

結果として、テーブル内の指定カラムに入っているデータから「○○○sample○○○」のような文字列を全て取得します。

完全一致検索

SELECT sample_column FROM sample_table WHERE sample_column LIKE "sample";

「完全一致」を目的としているため、ワイルドカードは付けません。

結果として、テーブル内の指定カラムに入っているデータから「sample」という文字列だけを全て取得します。

空白の扱い

LIKE句では空白は文字列として扱われるため、例えば「sample test」という文字列データは完全一致検索で”sample”とした場合にはヒットしません。

曖昧検索という言葉と完全一致検索という言葉はは相反する作用のものですので、LIKE句においては完全一致検索はあまり使うことはないでしょう。

LIKE句の複数条件の指定

さてここまではLIKE句に関する基本的な使用方法などを一通り解説してきました。

LIKE句について更に具体的な解説が欲しい方は別記事を参照してみてください。

ここからは応用編です。

LIKE句で曖昧検索をする際に複数の検索条件を指定したい場合にはどうすれば良いでしょうか。

例えば人名検索をするとしましょう。

「姓に”山”の付く人全員」及び「名に”太”の付く人全員」を検索したい、なんてこともあるかもしれません。

こういった場合にはLIKEとは別に「AND」もしくは「OR」を使ってLIKE句を重ねていきます。

では実際にコードで見てみましょう。

サンプルとして次のようなデータベーステーブルを作成しました。

MariaDB [sample]> SELECT * FROM stuffs;
+----+--------+--------+
| id | sei    | mei    |
+----+--------+--------+
|  1 | 山田   | 孝之   |
|  2 | 岡本   | 忍     |
|  3 | 内山   | 直哉   |
|  4 | 実道   | 昇     |
|  5 | 山之内 | みはる |
|  6 | 合谷   | 新平   |
|  7 | 春山   | 美奈   |
|  8 | 三木谷 | 隆太   |
|  9 | 道影   | 慎吾   |
| 10 | 手塚   | はると |
+----+--------+--------+
10 rows in set (0.000 sec)

では先ほど例として挙げた「姓に”山”の付く人全員」及び「名に”太”の付く人全員」を取得するためのコードを記述します。

MariaDB [sample]> SELECT * FROM stuffs
    ->            WHERE
    ->              sei LIKE '%山%'
    ->            OR
    ->              mei LIKE '%太%';
+----+--------+--------+
| id | sei    | mei    |
+----+--------+--------+
|  1 | 山田   | 孝之   |
|  3 | 内山   | 直哉   |
|  5 | 山之内 | みはる |
|  7 | 春山   | 美奈   |
|  8 | 三木谷 | 隆太   |
+----+--------+--------+
5 rows in set (0.000 sec)

複数条件で検索をかけましたが、予想通り期待した結果となっていることが確認できます。

LIKE句で注意すべき点

複合検索では一致検索を駆使すると思いますが、この一致検索を使用する際には次の理由から若干の注意を払う必要があります。

LIKE句では、前方一致検索でのマッチングはインデックスを利用できますが、それ以外の一致検索ではフルスキャンとなってしまうためサーバー負荷がかかりレスポンスが遅れることがあります。

検索ボリュームやサーバースペック、検索内容にもよりますが、現在のレンタルサーバーの状況と照らし合わせるとおおよそ20万件程度のデータでレスポンスが落ち込むようです。

まとめ

いかがでしたか?

今回はLIKE句を使って複数条件を同時検索する方法について解説してみました。

SQLのクエリはシンプルな構造となっているため、覚えること自体は少ないかもしれません。

この記事を読んでSQLをマスターすれば直接コマンドラインからの操作も出来るようになり開発にも幅が出ますので、しっかりと学習していきましょう。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。