Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

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句の構文を見てみましょう。

SELECT カラム名 FROM テーブル名 WHERE カラム名 LIKE 指定するパターン;

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

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

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

foodsテーブル

+--------+-------+
| name   | price |
+--------+-------+
| Banana | 100   |
| Apple  | 200   |
| Bread  | 400   |
| Cookie | 240   |
| Beef   | 1000  |
| Onion  | 300   |
+--------+-------+

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

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

SELECT * FROM foods WHERE name LIKE '%a%';

出力結果

+--------+-------+
| name   | price |
+--------+-------+
| Banana | 100   |
| Apple  | 200   |
| Bread  | 400   |
+--------+-------+
3 rows in set (0.00 sec)

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

ポテパンダの一言メモ

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

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

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

SELECT * FROM foods WHERE name LIKE '_____';

出力結果

+-------+-------+
| name  | price |
+-------+-------+
| Apple | 200   |
| Bread | 400   |
| Onion | 300   |
+-------+-------+
3 rows in set (0.00 sec)

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

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

SELECT * FROM foods WHERE name LIKE 'B_____';

出力結果

+--------+-------+
| name   | price |
+--------+-------+
| Banana | 100   |
+--------+-------+
1 row in set (0.00 sec)

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

ポテパンダの一言メモ

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

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

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

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

準備

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

MySQLのインストール・接続

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

$ brew install mysql

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

$ sudo mysql -u root -p

データベースの作成

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

mysql> CREATE DATABASE potepan;
Query OK, 1 row affected (0.00 sec)

mysql> USE potepan;

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

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

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

Mysql> CREATE TABLE vegetables(name VARCHAR(50), price INT);
Query OK, 0 rows affected (0.02 sec)

mysql> INSERT INTO vegetables VALUES('Apricot', 200),('Strawberry', 500),('Persimmon', 250),('Kiwi fruit', 100),('Kumquat',300),('Cherry',700),('Watermelon',500),('Pear',150);
Query OK, 8 rows affected (0.01 sec)

テーブルの状態

mysql> SELECT * FROM vegetables;
+------------+-------+
| name       | price |
+------------+-------+
| Apricot    |   200 |
| Strawberry |   500 |
| Persimmon  |   250 |
| Kiwi fruit |   100 |
| Kumquat    |   300 |
| Cherry     |   700 |
| Watermelon |   500 |
| Pear       |   150 |
+------------+-------+
8 rows in set (0.00 sec)

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

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

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

mysql> SELECT * FROM vegetables WHERE name LIKE '%o%';

出力結果

+------------+-------+
| name       | price |
+------------+-------+
| Apricot    |   200 |
| Persimmon  |   250 |
| Watermelon |   500 |
+------------+-------+
3 rows in set (0.00 sec)

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

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

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

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

mysql> SELECT * FROM vegetables WHERE name LIKE '_______';

出力結果

+---------+-------+
| name    | price |
+---------+-------+
| Apricot |   200 |
| Kumquat |   300 |
+---------+-------+
2 rows in set (0.00 sec)

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

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

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

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

mysql> SELECT * FROM vegetables WHERE name LIKE '_______';

出力結果

+---------+-------+
| name    | price |
+---------+-------+
| Apricot |   200 |
| Kumquat |   300 |
+---------+-------+
2 rows in set (0.00 sec)

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

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

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

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

mysql> SELECT * FROM vegetables WHERE name LIKE '%o_';

出力結果

+------------+-------+
| name       | price |
+------------+-------+
| Apricot    |   200 |
| Persimmon  |   250 |
| Watermelon |   500 |
+------------+-------+
3 rows in set (0.00 sec)

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

まとめ

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

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

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

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

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

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

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

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

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

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

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

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

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