曖昧検索をするためにはLIKE句を使用しますが、複数キーワードを指定したい場合もあるかと思います。
そこで今回はこのLIKE句について「基本的な使い方~複数検索する場合の方法」までをわかりやすく徹底解説してみたいと思います。
LIKE句とは?
LIKE句は曖昧検索を行う場合に使用するクエリとなります。
検索条件の前後またはその両方にワイルドカード文字を挿入することで、「○○○を含む文字列」を検索するという処理が可能となります。
データベースで検索をかける場合には、ピンポイントで「完全一致検索」よりも、前後または一部の文字列から検索する「部分一致検索」の方が圧倒的に多く使われます。
LIKE句の基本的記述について
それでは早速、LIKE句の使い方について解説していきます。
LIKE句は次のように使います。
SELECT [表示要素] FROM [テーブル名] WHERE [要素名] LIKE [曖昧検索の条件];
LIKE句は検索方法の一つですので、基本的にはWHEREの後ろに追加で記述します。
では次は検索条件の指定方法についてです。
検索条件の指定方法
検索条件の指定は大きく分けると「完全一致検索」「前方一致検索」「後方一致検索」「部分一致検索」の4つがあります。
これらの検索の詳細については以下の通りです。
短期集中でWebエンジニアになれるスクール
前方一致検索
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」という文字列だけを全て取得します。
短期集中でWebエンジニアになれるスクール
空白の扱い
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をマスターすれば直接コマンドラインからの操作も出来るようになり開発にも幅が出ますので、しっかりと学習していきましょう。
SQLを学んでWebエンジニアを目指そう
Webエンジニアは、Webサービスを作るエンジニアで非常に人気の高い職種です。
スタートアップやベンチャー企業が中心なので柔軟性のある雇用形態、魅力的な作業環境、面白いプロジェクト、高い報酬など非常に魅力的な求人が多いです。
Ruby on RailsやGo言語を用いたプロジェクトが多く、SQLも重要なスキルとなります。
このブログを運営するプログラミングスクールのポテパンキャンプでは、実践的なカリキュラムと現役エンジニアからのレビュー、そしてポートフォリオ添削や模擬面談などの面談転職サポートにより、最短距離でWebエンジニアを目指すことができます。
Webエンジニアへの転職を考えている方は、是非一度無料カウンセリングへお申込みください。
ワイルドカードとは?
ワイルドカードとは「%」や「_」などの記号を使い、任意のパターンに一致する文字列を置き換えたものを指します。
皆さんもよく見かけるものでは「アスタリスク(*)」が挙げられます。
SQLで使用するワイルドカードは上記二つ(「%」と「_」)で、これらの意味は次の通りとなります。
「%」 ───── ゼロ文字以上の文字列。簡単に言い換えると何かしらの文字が一つ以上ある状態
「_」 ───── 任意の1文字