MySQL ワイルドカードのチュートリアル: Like、NOT Like、エスケープ、( % )、( _ )

何ですか MySQL ワイルドカード?

MySQL ワイルドカード 複雑な条件に一致するデータを検索するのに役立つ文字です。ワイルドカードは、LIKE 比較演算子または NOT LIKE 比較演算子と組み合わせて使用​​されます。

ワイルドカードを使用する理由

SQL の使用に慣れている場合は、SELECT 句と WHERE 句を使用して複雑なデータを検索できると思われるかもしれません。では、なぜワイルドカードを使用するのでしょうか?

その質問に答える前に、例を見てみましょう。Myflixビデオライブラリのマーケティング部門がテキサス市でマーケティングプロモーションを実施し、会員数に関するフィードバックを得たいとします。

テキサスから登録された場合は、次の SELECT ステートメントを WHERE 句と組み合わせて使用​​して、必要な情報を取得できます。

SELECT * FROM members WHERE postal_address = 'Austin , TX' OR  postal_address = Dallas , TX OR postal_address = Iola,TX OR postal_adress = Houston ,TX';

上記のクエリからわかるように、「WHERE句” は複雑になります。ただし、ワイルドカードを使用すると、以下に示すスクリプトのように単純なものを使用できるため、クエリが簡素化されます。

SELECT * FROM  members  WHERE postal_address  like '% TX';

つまり、ワイルドカードを使用すると、データ駆動型アプリケーションに強力な検索エンジンを開発できるようになります。

ワイルドカードの種類

% パーセンテージ

% パーセント文字はパターンを指定するために使用されます。 0 個以上の文字基本的な構文は次のとおりです。

SELECT statements... WHERE fieldname LIKE 'xxx%';

こちら

  • SELECTステートメント…」は標準の SQL SELECT コマンドです。
  • 「WHERE」はフィルターを適用するために使用されるキーワードです。
  • 「LIKE」はワイルドカードと組み合わせて使用​​される比較演算子です。
  • 「xxx」は 0 文字以上などの指定された開始パターンで、「%」はゼロ (XNUMX) から始まる任意の数の文字に一致します。

上記の説明を十分に理解するために、実際の例を見てみましょう

タイトルの一部に「コード」という単語が含まれる映画をすべて取得したいとします。パーセンテージ ワイルドカードを使用して、「コード」という単語の両側でパターン マッチングを実行します。 以下は、望ましい結果を達成するために使用できる SQL ステートメントです。

SELECT * FROM movies WHERE title LIKE '%code%';

上記のスクリプトを実行すると、 MySQL 作業台 myflixdb に対して実行すると、以下に示す結果が得られます。

movie_id title director year_released category_id
4 Code Name Black Edgar Jimz 2010 NULL
7 Davinci Code NULL NULL 6

検索キーワード「コード」がタイトルの先頭または末尾に表示される場合でも、結果セットで返されることに注意してください。 これは、コードの先頭に任意の数の文字が含まれており、その後に任意の数の文字が末尾に続くパターン「code」と一致するためです。

次に、検索条件の先頭にのみパーセンテージ ワイルドカードを含めるように上記のスクリプトを変更してみましょう。

SELECT * FROM movies WHERE title LIKE '%code';

上記のスクリプトを実行すると、 MySQL myflixdb に対してワークベンチを実行すると、以下に示す結果が得られます。

movie_id title director year_released category_id
7 Davinci Code NULL NULL 6

データベースから返されたレコードは XNUMX つだけであることに注意してください。 これは、このコードが映画タイトルの先頭にある任意の数の文字に一致し、パターン「code」で終わるレコードのみを取得するためです。

次に、一致させる指定パターンの末尾にパーセンテージ ワイルドカードを移動します。変更されたスクリプトを以下に示します。

SELECT * FROM movies WHERE title LIKE 'code%';
上記のスクリプトを実行すると、 MySQL myflixdb に対してワークベンチを実行すると、以下に示す結果が得られます。
movie_id title director year_released category_id
4 Code Name Black Edgar Jimz 2010 NULL

データベースから返されたレコードは XNUMX つだけであることに注意してください。 これは、私たちのコードが、パターン「code」で始まり、その後に任意の数の文字が続くすべてのタイトルに一致するためです。

_ アンダースコアワイルドカード

アンダースコアワイルドカードは次の目的で使用されます。 XNUMX つの文字に正確に一致する。 200x 年に公開されたすべての映画を検索したいとします。ここで、x は任意の値を表す 200 つの文字です。 これを実現するには、アンダースコアのワイルドカードを使用します。 以下のスクリプトは、「XNUMXx」年に公開されたすべての映画を選択します。

SELECT * FROM movies WHERE year_released LIKE '200_';

上記のスクリプトを実行すると、 MySQL myflixdb に対してワークベンチを実行すると、以下に示す結果が得られます。

movie_id title director year_released category_id
2 Forgetting Sarah Marshal Nicholas Stoller 2008 2
9 Honey mooners Jhon Shultz 2005 8

リリースされたフィールド年に任意のキャラクターが 200 フォローしている映画のみが結果セットで返されていることに注意してください。 これは、アンダースコアのワイルドカードがパターン 200 の後に任意の XNUMX 文字が続くものと一致したためです。

みたいではなく

NOT 論理演算子をワイルドカードと一緒に使用すると、指定したパターンに一致しない行を返すことができます。

200x 年に公開されなかった映画を取得したいとします。結果を取得するには、NOT 論理演算子とアンダースコア ワイルドカードを併用します。以下は、それを実行するスクリプトです。

SELECT * FROM movies WHERE year_released NOT LIKE '200_';

movie_id title director year_released category_id
1 Pirates of the Caribean 4 Rob Marshall 2011 1
4 Code Name Black Edgar Jimz 2010 NULL
8 Underworld-Awakeninh Michahel Eal 2012 6

結果セットには、公開年が 200 で始まらない映画のみが返されていることに注意してください。これは、ワイルドカード パターン検索で NOT 論理演算子を使用したためです。

エスケープキーワード

ESCAPE キーワードは次の目的で使用されます。 文字に一致するエスケープパターン データの一部を形成する場合は、パーセンテージ (%) やアンダースコア (_) など。

使用できる文字列「67%」を確認したいとします。

LIKE '67#%%' ESCAPE '#';

映画「67% Guilty」を検索したい場合は、以下に示すスクリプトを使用して検索できます。

SELECT * FROM movies WHERE title LIKE '67#%%' ESCAPE '#';

二重の「%LIKE 句の %"、最初の赤色の "%”は検索対象の文字列の一部として扱われます。 もう XNUMX つは、その後に続く任意の数の文字と一致するために使用されます。

次のようなクエリを使用しても、同じクエリが機能します。

SELECT * FROM movies WHERE title LIKE '67=%%' ESCAPE '=';

まとめ

  • Like と Wildcards は、複雑なパターンに一致するデータを検索するのに役立つ強力なツールです。
  • パーセンテージ、アンダースコア、文字リストなどのワイルドカードが多数あります (サポートされていません)。 MySQL )特に
  • パーセント ワイルドカードは、0 以降の任意の数の文字と一致するために使用されます。
  • アンダースコア ワイルドカードは、XNUMX つの文字に正確に一致するために使用されます。