MySQLのWHERE LIKEで検索機能向上!パターンマッチを学ぶ
  • facebookページ
  • twitterページ
  • 2019.12.16

    MySQLのWHERE LIKEで検索機能向上!パターンマッチを学ぶ

    SQLを学び始めたステップではなかなか使用することがないMySQLのWHERE LIKE句。少し余裕が出てきたタイミングでぜひ使用してみることをおすすめします。今回の記事では、MySQL WHERE LIKE句の主な機能をご紹介しつつ、実際に使用する方法をハンズオンで体験していきましょう。

    本記事の要点
    • MySQL WHERE LIKE句はパターンマッチに利用できる
    • MySQLを使ったWHERE LIKE句のハンズオン

    MySQL WHERE LIKE句とは

    MySQL WHERE LIKE句には、以下2つの機能があります。

    • WHERE LIKE句で指定する文字列を含むレコードを出力する
    • WHERE LIKE句で指定する文字数と合致するレコードを出力する

    重要なのは、MySQLのWHERE LIKE句に「パターンマッチ」機能があるということ。パターンマッチとは、特定のパターンが出現するかどうかを確かめることです。MySQL WHERE LIKE句の構文を見てみましょう。

    指定するパターンの部分には、「%」「_」(アンダーバー)の2つを用いることができます。使い分けは以下の通りです。

    • 「%」 → WHERE LIKE句で指定する文字列を含むレコードを出力する
    • 「_」  → WHERE LIKE句で指定する文字数と合致するレコードを出力する

    パターンの指定には慣れが必要ですが、すでにSELECTステートメントの構文を知っている方であればWHERE LIKE句の加わる構文も難しくはないはず。実際にMySQLのWHERE LIKE句が使用されている構文を見て、さらに認識を深めましょう。

    以下のようなテーブルがあることを前提とします。

    foodsテーブル

    上記のテーブルからnameカラムに「A」または「a」を含むレコードを出力してみましょう。

    WHERE LIKEを含むSELECTステートメント

    出力結果

    WHERE LIKE句のパターンに「%a%」と指定することで、nameカラムに「A」もしくは「a」が入っているレコードを出力できました。

    ポテパンダの一言メモ

    「%」には、「0文字以上の任意の文字列」という意味があります。先ほどのSELCTステートメントの場合「前後に0文字以上の文字列が付いた『A』または『a』を含むパターン」という指定を行っています。

    次に「_」を使用して5文字の文字列を出力してみましょう。

    WHERE LIKEを含むSELECTステートメント

    出力結果

    WHERE LIKE句のパターンに「_____」(アンダーバー5個)と指定することで、nameカラムの値が5文字のレコードを出力できました。ちなみに以下のような使い方もできます。

    WHERE LIKEを含むSELECTステートメント

    出力結果

    「B_____」(Bとアンダーバー5個)と指定することで、「Bから始まり、その後に5文つ文字列が続くレコードの出力」ができました。

    ポテパンダの一言メモ

    「_」には、「任意の1文字」という意味があります。「%」の場合は「0文字以上の任意文字列」でしたが、「_」を使用すると厳密な文字数を指定することが可能です。

    【関連記事】
    ▶︎MySQLのUPDATEの基本とデータベースに格納された値を効率よく変更する方法
    ▶︎MySQLのlimitのサンプルコード集 offset指定や効率的な件数取得方法は?

    MySQLでWHERE LIKE句ハンズオンにトライ

    こちらでは、実際にMySQLというデータベースを使用してWHERE LIKE句を使ってみましょう。

    準備

    まずはMySQLを使用するための準備をしていきます。

    MySQLのインストール・接続

    まだMySQLをインストールしていない場合は、インストールしましょう。

    MySQLのインストールが終了したら、接続します。

    データベースの作成

    次にデータベースをMySQL上に作成し、使用するデータベースを指定しましょう。

    これでMySQLを使用する準備は完了しました。

    ベースとなるテーブルの作成

    次にベースとなるテーブルを作成しましょう。

    テーブルの状態

    MySQL WHERE LIKE句を使って簡単なパターンマッチ

    それでは、最初に見た例のようなパターンマッチを体験してみましょう。vegetablesテーブルのnameカラムに「o」が含まれるレコードを抽出します。

    WHERE LIKEを含むSELECTステートメント

    出力結果

    LIKE以降のパターンに「%o%」を指定することで、「前後に任意の0文字が付いたoを含むレコード」の出力ができました。

    MySQL WHERE LIKE句を使って簡単なパターンマッチ2

    次も同様にパターンを指定していきますが、今度はnameカラムが7文字のレコードのみを取得してみましょう。

    WHERE LIKEを含むSELECTステートメント

    出力結果

    LIKE以降のパターンに「_______」(アンダーバー7個)を指定することで、「7文字の値のレコード」のみを出力できました。

    MySQL WHERE LIKE句を使って簡単なパターンマッチ2

    次も同様にパターンを指定していきますが、今度はnameカラムが7文字のレコードのみを取得してみましょう。

    WHERE LIKEを含むSELECTステートメント

    出力結果

    LIKE以降のパターンに「_______」(アンダーバー7個)を指定することで、「7文字の値のレコード」のみを出力できました。

    「%」と「_」を組み合わせたパターンマッチ

    「%」と「_」を組み合わせてパターンマッチを行うことも可能です。実際に体験してみましょう。

    WHERE LIKEを含むSELECTステートメント

    出力結果

    「%o_」と指定することで「前に0文字以上の文字と後に1文字が付くoを含んだレコードが出力可能です。このように「%」と「_」を組み合わせることで、より複雑なパターンマッチが行えるようになります。

    まとめ

    今回の記事では、MySQLのWHERE LIKE句の主な機能をご紹介しつつ、実際に使用する方法をハンズオンで体験していきました。使ってみると非常に簡単なWHERE LIKE句ですが、複雑なパターンマッチが行えるため便利です。ぜひ、検索機能をアップデートする際に利用してみましょう。

    【関連記事】
    ▶︎MySQLのleft joinサンプルコード onとusingの結合条件指定の違いは?
    ▶︎MySQLのcreate tableサンプルコード集 カラム定義を自動出力する方法は?



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE