MySQL - NOT LIKE演算子

こんにちは、データベースの熱心な学習者さんたち!今日は、MySQLの素晴らしい世界に飛び込み、私たちのSQLツールキットの中の強力なツールを探ってみましょう:NOT LIKE演算子です。あなたの近所の親切なコンピュータ教師として、コードを一行も書いたことのない方でもこの旅を案内することを楽しみにしています。では、シートベルトを締めて、始めましょう!

MySQL - NOT LIKE Operator

MySQL NOT LIKE演算子

NOT LIKE演算子は、LIKE演算子の反抗的な兄弟のようなものです。LIKE演算子は一致するパターンを見つけるのを助けてくれますが、NOT LIKE演算子はその逆を行います。特定のパターンに一致しないすべてのものを見つけるのを助けます。まるでコンピュータに「これ以外のすべてを表示してくれ!」と言っているようなものです。

まず、簡単な例から始めましょう。booksというテーブルがあり、titleというカラムがあるとします。'A'で始まらないすべての本を見つけたい場合は、以下のようにします:

SELECT * FROM books WHERE title NOT LIKE 'A%';

このコードは以下のように動作します:

  • SELECT *:MySQLにすべてのカラムを選択するように指示します。
  • FROM booksbooksテーブルを検索しています。
  • WHERE title NOT LIKE 'A%':これが魔法の部分です。これは「'A'で始まらないすべてのタイトルを返してくれ」と言っています。

%はワイルドカードで、「何かが続く」という意味です。したがって、'A%'は「'A'に続く何か」という意味です。

NOT LIKE演算子とワイルドカードの使用

では、ワイルドカードで少しスパイスを効かせてみましょう!MySQLは主に以下の2つのワイルドカードを提供しています:

  • %:0文字、1文字、または複数の文字を表します
  • _:1文字を表します

以下は一般的なワイルドカードの使用例の表です:

ワイルドカード 説明
% 任意の文字数 '%adventure%'
_ 単一の文字 _at
[charlist] charlistのいずれかの文字 [abc]%'
[^charlist] または [!charlist] charlistに含まれない任意の文字 '[^abc]%'

例えば、末尾が「ing」でないすべての本のタイトルを見つけたい場合は、以下のようにします:

SELECT * FROM books WHERE title NOT LIKE '%ing';

もしくは、正確に3文字がない本を見つけたい場合は:

SELECT * FROM books WHERE title NOT LIKE '___';

各アンダースコアは1文字を表します。したがって、'___'は「正確に3文字」という意味です。

NOT LIKE演算子とAND/OR演算子の使用

時には複数の条件を組み合わせる必要があります。その際にはANDおよびORが役立ちます。例えば、'T'で始まらないか「ing」で終わらない本を見つけたい場合は:

SELECT * FROM books
WHERE title NOT LIKE 'T%'
AND title NOT LIKE '%ing';

もしくは、'A'で始まらないか末尾が'z'でない本を見つけたい場合は:

SELECT * FROM books
WHERE title NOT LIKE 'A%'
OR title NOT LIKE '%z';

ANDは両方の条件が真である必要があり、ORは少なくとも一方の条件が真である必要があります。

NOT LIKE演算子の文字列に対する使用

NOT LIKE演算子は特に文字列を扱う際に便利です。例えば、customersテーブルがあり、名前に'son'が含まれないすべての顧客を見つけたい場合は:

SELECT * FROM customers
WHERE name NOT LIKE '%son%';

このクエリは'son'が含まれないすべての名前を返します。したがって、'Johnson'や'Sonny'は除外され、'Smith'や'Brown'は含まれます。

次に、面白い変化です:もしその名前の2番目の文字が'a'でないものを見つけたい場合は:

SELECT * FROM customers
WHERE name NOT LIKE '_a%';

このクエリは「2番目の文字が'a'でないすべての名前」を表示します。

NOT LIKE演算子を使用したクライアントプログラム

では、MySQLクライアントプログラムを使用して実際にこれらの知識を活かしてみましょう。ここではMySQLコマンドラインクライアントを使用しますが、原則は他のMySQLクライアントにも適用できます。

まず、簡単なemployeesテーブルを作成します:

CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
position VARCHAR(50)
);

INSERT INTO employees (name, position) VALUES
('John Doe', 'Manager'),
('Jane Smith', 'Developer'),
('Bob Johnson', 'Designer'),
('Alice Brown', 'Tester');

次に、'D'で始まらないポジションを持つすべての従業員を見つけます:

SELECT * FROM employees
WHERE position NOT LIKE 'D%';

これはJohn Doe(Manager)とAlice Brown(Tester)を返すはずです。

もう少し複雑な例を試みましょう。名前が'J'で始まらないかポジションが'er'で終わらない従業員を見つけます:

SELECT * FROM employees
WHERE name NOT LIKE 'J%'
AND position NOT LIKE '%er';

これはAlice Brown(Tester)を返すはずです。

そして、ここまででNOT LIKE演算子の基本をマスターしました!練習が完璧を生むことを忘れないでください。自分自身のクエリを試してみましょう。あなたのデータの中に今まで気づかなかった興味深いパターンが見つかるかもしれません!

最後に、私が教師としての経験から共有したい小さな秘密があります:SQLを学ぶ最良の方法は、それをパズルゲームのように楽しむことです。各クエリは解かれる謎です。detectiveの帽子をかぶり、データを探索してみましょう。未来のデータベースの魔法使いたち、快適なクエリを楽しんでください!

Credits: Image by storyset