SQLのLIKE句は、あいまいな検索をするときに使用するクエリです。SQLでLIKE句を使用することにより、対象のカラムに対して文字列検索を行えます。本記事では、SQLのLIKE句の各種検索方法や使い方・エスケープ方法を詳しく解説します。
目次
SQLのLIKE句とは、あいまいな検索を行うときに使用するクエリです。SQLでLIKE句を使用することによって、特定のカラムに対して部分一致の文字列検索ができるようになります。
LIKE句は、WHERE句内で条件を指定する際にも用いられ、特定の文字列を含むレコードを検索することが可能です。基本的な使い方は、以下の通りです。
SELECT [表示要素] FROM [テーブル名] WHERE [カラム名] LIKE [あいまい検索の条件];
上記のように、WHERE句の後に条件としてLIKE句を記述します。「%」や「_」といった特殊文字はワイルドカードと呼ばれ、検索条件として用いられます。「%」は「0文字以上の任意の文字列」を、「_」は「任意の1文字」を表すものです。
SQLは「Structured Query Language」の略称で、日本語では「構造化問い合わせ言語」という意味です。一般的なプログラミング言語とは異なり、SQLはデータベースに対して命令文を送信する役割があります。
プログラミング言語は、ソースコードに命令を記述しプログラムを実行しますが、SQLはデータベースに対して特定の操作を指示するための言語です。SQLをプログラミング言語と同一であると考える方もいますが、正確にはデータベース操作のための専用言語だと理解することが重要です。
ワイルドカードとは、条件に指定したい文字列を記述するときに使う「%」や「_」などの特殊文字のことです。また、あいまい検索を指示する記号としても機能します。
「%」や「_」には、それぞれ以下のような意味があります。
検索条件にワイルドカードを使用することで、「〇〇含む文字列を検索する」操作が可能です。たとえば「%電%」というワイルドカードを記述したら、電が付く0文字以上の任意の文字列を検索できます。
SQLのLIKE句を使った検索方法は、主に5つあります。
実際にSQLのLIKE句を使って検索する場合は、それぞれ理解しておくことで効果的な活用が可能です。
前方一致検索は、文字列が特定の文字で始まるデータを検索する方法です。この目的を達成するために、ワイルドカードを検索条件の最後に付けます。たとえば、sample1テーブル内のusernameカラムに入っているデータから「電〇〇」のようなデータをすべて取得する場合は、以下のように記述します。
SELECT username FROM sample1 WHERE user LIKE "電%";
このように、ワイルドカードを検索条件の最後に付けることで、前方一致検索が可能です。このクエリによって、テーブル内の指定カラムから「電○○」のような文字列をすべて取得できます。
このクエリの検索条件は、「電が付く0文字以上の任意の文字列」です。そのため、検索条件の「電」の後にワイルドカードの「%」が付いています。
後方一致検索は、文字列が特定の文字で終わるデータを検索する方法です。この目的を達成するために、ワイルドカードを検索条件の最初に付けます。たとえば、sample1テーブルのusernameカラムから「○○電」のようなデータをすべて取得する場合は、以下のようなSQLクエリを記述します。
SELECT username FROM sample1 WHERE user LIKE "%電";
このように、ワイルドカードを検索条件の最初に付けることで、後方一致検索が可能です。このクエリによって、テーブル内の指定カラムに入っているデータから「○○電」のような文字列をすべて取得できます。
とくにLIKE句を初めて使用する場合、前方一致検索と後方一致検索の方法を混同しやすいので注意が必要です。
部分一致検索は、文字列が特定の文字を含むデータを検索する方法です。この目的を達成するために、ワイルドカードを検索条件の前後に付けます。
このとき、前後のどちらかにワイルドカードを付け忘れてしまうと、前方一致検索もしくは後方一致検索になってしまうため、注意が必要です。たとえば、sample1テーブル内のusernameカラムに入っているデータから、「○電○」のようなデータをすべて取得する場合は、以下のようにSQLクエリを記述します。
SELECT username FROM sample1 WHERE user LIKE "%電%";
以上のように、検索条件「電」に対してワイルドカードを前後から挟む形で記述することにより、部分一致検索が行えます。
このクエリによって、テーブル内の指定カラムから「○電○」のような文字列をすべて取得することが可能です。これから部分一致検索を行う場合は、以上の方法をしっかりと理解しておきましょう。
完全一致検索は、「完全一致」を目的としている検索方法になるため、ワイルドカードを検索条件に付けずに記述します。前後や後方・部分的な文字列の検索ではなく、特定の文字列(例:「電電」)を完全に一致する形で取得したい場合は、以下のようにSQLクエリを記述します。
SELECT username FROM sample1 WHERE user LIKE "電電";
このように、ワイルドカードを検索条件に付けずに記述することで、テーブル内の指定カラムから「電電」という文字列だけをすべて取得可能です。ワイルドカードを検索条件のどこかに付けてしまうと、他の検索方法(前方一致、後方一致、部分一致)になってしまいます。
そのため、完全一致検索を行う場合はワイルドカードを付けずに記述するというポイントを覚えておきましょう。
指定した文字列を含まないデータを探す場合、「NOT LIKE句」を使います。NOT LIKE句はLIKE句を否定する命令句で、指定する文字や文字列を含んでいないデータを検索・抽出したい場合に使用されるものです。
使い方はLIKE句とほぼ同じで、NOT LIKE句にもLIKE句と同様に、前方一致検索・後方一致検索・部分一致検索・完全一致検索といった検索方法があります。NOT LIKE句を使用してsample1テーブルのusernameカラムから「電」という文字列を含まないデータをすべて取得する場合は、以下のように記述しましょう。
SELECT username FROM sample1 WHERE user NOT LIKE "%電%";
NOT LIKE句は、通常LIKE句が記述される場所にNOT LIKEを記述するだけで使用できます。またこのクエリによって、テーブル内の指定カラムから「電」を含まない文字列をすべて取得することが可能です。
NOT LIKE句も便利に活用できる検索方法なため、LIKE句と一緒にNOT LIKE句も覚えておくことをおすすめします。
SQLのLIKE句で複数条件を指定する場合は、LIKEとは別に「AND」や「OR」を使ってLIKE句を重ねることで指定が可能です。たとえば、電が付く文字列と水が付く文字列の2つを取得するためには、以下のような記述をします。
SELECT sample1 FROM member WHERE username LIKE '電%' AND username LIKE '%水%';
そして、電が付く文字列と水が付く文字列のどちらかを取得したい場合は、以下のように記述します。
SELECT sample1 FROM member WHERE username LIKE '電%' OR username LIKE '%水%';
このように「AND」や「OR」を使ってLIKE句重ねて記述すれば、複数条件でも検索できます。LIKE句は幅広い検索方法があり、柔軟性が高い点が特徴です。
SQLのLIKE句でワイルドカード自体を検索する際には、エスケープ処理が必要になります。エスケープ処理とは、特殊な意味を持つ文字をその文字自体として扱うための処理です。
エスケープ処理をするための記述例は、以下の通りです。
SELECT FROM member2 WHERE name LIKE '%|_%' ESCAPE '|';
ワイルドカードの「%」「_」などの文字列を探したい場合には、「¥」を前に付けることでエスケープ処理ができます。エスケープ処理をするために使う文字は基本的に「¥」になりますが、後ろに「ESCAPE」を付けて指定することにより別の文字への変更が可能です。
エスケープ処理をする場合は、ぜひ参考にしてみてください。
SQLのLIKE句で大文字・小文字を判別する方法もありますが、その扱いはデータベース管理システム(DBMS)に依存するため注意が必要です。MySQLでは、デフォルトで大文字・小文字は区別されません。しかし、BINARYキーワードを使用することにより区別できます。
通常のLIKE句では、以下のように記述します。
SELECT FROM user WHERE name LIKE "%a%";
MySQLでBINARYを使用すると、以下のような記述することで大文字・小文字が区別されます。
SELECT * FROM user WHERE name LIKE BINARY "%a%";
このように、LIKE句で大文字・小文字を区別したい場合は、DBMSの仕様と上記の解決方法を覚えておきましょう。
SQLのLIKE句はさまざまな方法で検索ができるため、利便性が高い機能です。
しかし、SQLのLIKE句を使う際には、いくつか注意点があります。
SQLのLIKE句は、前方一致検索では一部のDBMSや設定でインデックスが利用可能です。しかし、部分一致や後方一致検索では通常フルスキャンが行われるため、データ量が多い場合はサーバー負荷が高くなる可能性があります。
またあいまい検索の速度は、使用しているDBMSやデータ量・インデックスの有無に依存するため、大規模なデータセットでの検索には注意が必要です。SQLのLIKE句は便利な機能ですが不便な場合や不向きな場合もあるため、使う際には注意しましょう。
SQLのLIKE句と=演算子は同様に感じる方もいますが、実際はそれぞれに明確な違いがあります。=演算子は完全一致のみ行い、対象の文字列が完全に一致する場合にのみ真と評価されます。
一方でLIKE句は、部分一致・前方一致・後方一致など、より柔軟な文字列検索が可能です。とくにLIKE句を使用する場合は、ワイルドカードを使ってさまざまなパターンの文字列検索ができます。
このような違いがあるため、どちらを使用するかによって異なる結果が得られる可能性があります。これからSQLのLIKE句と=演算子を使う場合は、違いをしっかりと理解してから使用しましょう。
SQLのLIKE句を使うことで、さまざまな検索方法を試せるため、特定の文字列を含むデータを検索する場合やその反対の場合でも効果的に活用できるでしょう。さらにワイルドカードやエスケープ処理などを使えば、有効にSQLのLIKE句を使用できるようになります。
これからSQLのLIKE句を使う場合は、ぜひ本記事を参考にしてください。
2024.06.17
子供におすすめのプログラミングスクール10選!学習メリットや教室選びのコツも紹介
#プログラミングスクール
2022.01.06
【完全版】大学生におすすめのプログラミングスクール13選!選ぶコツも詳しく解説
#プログラミングスクール
2024.01.26
【未経験でも転職可】30代におすすめプログラミングスクール8選!
#プログラミングスクール
2024.01.26
初心者必見!独学のJava学習方法とおすすめ本、アプリを詳しく解説
#JAVA
2024.01.26
忙しい社会人におすすめプログラミングスクール15選!失敗しない選び方も詳しく解説
#プログラミングスクール
2022.01.06
【無料あり】大阪のおすすめプログラミングスクール14選!スクール選びのコツも紹介
#プログラミングスクール
2024.01.26
【目的別】東京のおすすめプログラミングスクール20選!スクール選びのコツも徹底解説
#プログラミングスクール
2024.01.26
【無料あり】福岡のおすすめプログラミングスクール13選!選び方も詳しく解説
#プログラミングスクール
2024.01.26
【徹底比較】名古屋のおすすめプログラミングスクール13選!選び方も詳しく解説
#プログラミングスクール
2024.01.26
【徹底比較】おすすめのプログラミングスクール18選!失敗しない選び方も徹底解説
#プログラミングスクール