バナー画像

データベースでは文字列操作を必要とするケースは比較的多く、中でも文字列の検索においては全てのシステムにおいて必要となります。

この文字列操作には様々なものがありますが、今回はその文字列操作の中でも「LIKE句を否定使用する」方法について解説してみたいと思います。

データベースではこのLIKE句やNOT LIKE句を使う頻度が最も多いと思いますので、一緒に学習していきましょう。

NOT LIKE句とは

NOT LIKE句はLIKE句と対を成す命令句であり、指定した文字列を含まないデータを取得したい場合に使用する命令句です。

等号否定(!=)を使えばいいだけでは?と思った方もいらっしゃると思いますが、それで解決するケースばかりではないため、やはり覚えておいた方が良いでしょう。

また若干話はそれますが、もし等号否定で全て解決できるようであれば、そもそもLIKE句やNOT LIKE句というものは存在していないはずですので、やはり必要なケースがあるということになります。

NOT LIKE句の使い方

LIKE句の使い方とほぼ一緒ですが、この記事ではLIKE句の使用方法については触れていないため、ここでは一から解説していきます。

NOT LIKE句にはLIKE句同様に前方一致、後方一致、完全一致という三つの検索方法があります。

どの方法についても、基本的には「検索条件の前後または両方にワイルドカードを記述する」ことで曖昧検索を実行します。

ワイルドカードとは?

ワイルドカードとは、文字列の指定や比較・検索などを行う際に、任意または特定のパターンに一致する文字列の代わりとなる特殊な記号や記法を指します。

例えば以下のコードでは「%(パーセント)」が使用されていますが、これは「0文字以上の任意の文字列」という意味を指します。

他にも「_(アンダーバー)」などがありますが、これは「任意の1文字」を指すワイルドカードとなっています。

前方一致検索(曖昧検索)

SELECT [項目名], ... FROM [テーブル名] WHERE [項目名] NOT LIKE '[検索条件]%';

前方一致検索は、検索条件の後に○○○というような任意の文字を含まないレコードの検索を行いたい場合に使用します。

例えば、検索条件に「sample」を指定し前方一致検索をかけると「○○○sample」の条件に引っ掛かるレコードを全て取得することが出来ます。

※NOT LIKE句で前方一致検索を指定した場合の説明のため、LIKE句とは逆の作用となりますので注意してください。

後方一致検索(曖昧検索)

SELECT [項目名], ... FROM [テーブル名] WHERE [項目名] NOT LIKE '%[検索条件]';

後方一致検索は、検索条件の前に○○○というような任意の文字を含まないレコードの検索を行いたい場合に使用します。

例えば、検索条件に「sample」を指定し後方一致検索をかけると「sample○○○」の条件に引っ掛かるレコードを全て取得することが出来ます。

※NOT LIKE句で後方一致検索を指定した場合の説明のため、LIKE句とは逆の作用となりますので注意してください。

完全一致検索

SELECT [項目名], ... FROM [テーブル名] WHERE [項目名] NOT LIKE '%[検索条件]%';

完全一致検索はその名の通り、検索条件だけで曖昧検索はされません。

検索条件に「sample」と指定した場合、指定カラム内の文字列に”sample”を含むレコードが全て除外されます。

※NOT LIKE句で完全一致検索を指定した場合の説明のため、LIKE句とは逆の作用となりますので注意してください。

NOT LIKE句の具体例

説明だけでは解り難いと思いますので、実際にサンプルコードを使って見てみましょう。

サンプルコードに使用するテーブルは以下のようになっています。

MariaDB [sample]> SELECT * FROM sample_table;
+----+-------------+
| id | name        |
+----+-------------+
|  1 | sample      |
|  2 | Sample      |
|  3 | SAMPLE      |
|  4 | Sample Blog |
|  5 | Blog Sample |
|  6 | SampleBlog  |
|  7 | BlogSample  |
+----+-------------+
7 rows in set (0.000 sec)

前方一致検索(曖昧検索)

MariaDB [sample]> SELECT * FROM sample_table WHERE name NOT LIKE 'sample%';
+----+-------------+
| id | name        |
+----+-------------+
|  5 | Blog Sample |
|  7 | BlogSample  |
+----+-------------+
2 rows in set (0.000 sec)

NOT LIKE句で前方一致検索をかけた場合、「sample○○○でないもの」が取得されていることが確認できます。

後方一致検索(曖昧検索)

MariaDB [sample]> SELECT * FROM sample_table WHERE name NOT LIKE '%sample';
+----+-------------+
| id | name        |
+----+-------------+
|  4 | Sample Blog |
|  6 | SampleBlog  |
+----+-------------+
2 rows in set (0.000 sec)

NOT LIKE句で後方一致検索をかけた場合、こちらも前方一致検索と同様に「○○○sampleでないもの」が取得されていることが確認できます。

完全一致検索

MariaDB [sample]> SELECT * FROM sample_table WHERE name NOT LIKE '%sample%';
Empty set (0.000 sec)

NOT LIKE句で完全一致検索をかけた場合、「sample」が含まれているレコードが全て除外されて取得されるため、”Empty”が表示されていることが確認できます。

大文字と小文字について

上で記述している結果で既に気づいた人もいらっしゃると思いますが、LIKE句やNOT LIKE句は検索結果に大文字小文字の区別がありません。

要するに「sample」という条件で検索をした場合には「Sample」も「sample」も「SAMPLE」も全て条件に当てはまることになります。

これを回避する方法は、環境毎に若干異なってきますが、MySQLではLIKE句を「LIKE BINARY」NOT LIKE句を「NOT LIKE BINARY」とすることで区別することが出来ます。

MariaDB [sample]> SELECT * FROM sample_table WHERE name NOT LIKE BINARY '%Sample%';
+----+--------+
| id | name   |
+----+--------+
|  1 | sample |
|  3 | SAMPLE |
+----+--------+
2 rows in set (0.001 sec)

まとめ

今回はNOT LIKE句についてコードを交えながら解説してみましたが、ご理解していただけましたか?

否定形の命令句は使っているとわけがわからなくなってしまうこともありますので、基本をしっかりとマスターしておくことを強くお勧めします。

またこれ以外でも、正規表現などを使って曖昧検索をかけることも出来ますので、色々と試してみましょう。

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

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

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

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

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

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

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

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

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

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

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