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

MySQLのBETWEENで狙ったデータを取得!【ハンズオン付き】

MySQLのBETWEENは範囲検索を行う際にとても便利な演算子です。SELECTステートメントを使用することができるのであれば、ぜひ覚えておきたい機能ですね。そこで今回の記事では、MySQL BETWEENの主な機能をご紹介しつつ、実際に使用する方法をハンズオンで体験していきましょう。

本記事の要点
  • MySQLのBETWEENはSELECTとともに使用できる範囲検索演算子
  • MySQLを使ったBETWEENのハンズオン

MySQL BETWEENとは

MySQLのBETWEENは、指定した範囲(最小値〜最大値)に当てはまるデータを抽出する機能を持っています。指定する範囲は数値だけでなく、文字列や日付などを当てはめることも可能です。SELECTステートメントだけを使用するとテーブルの全てのデータを取得することしかできません。そこで、BETWEENを使用することで抽出したい範囲のデータのみを抽出することができるのです。

MySQL BETWEENの構文を以下で見てみましょう。

SELECT カラム名 FROM テーブル名 WHERE カラム名 BETWEEN 最小値 AND 最大値;

基本的には、BETWEENの後に「最小値」「最大値」を指定することで、指定した範囲に該当するデータを抽出できます。

また以下のように記述することで、指定した範囲以外のデータを抽出できます

SELECT カラム名 FROM テーブル名 WHERE カラム名 NOT BETWEEN 最小値 AND 最大値;

どちらもBETWEENを使用する際には、「WHERE」が必要であるということを忘れないでください。

SELECTステートメントの構文を覚えている方であれば、BETWEENの加わる構文も難しくはないはずです。実際にMySQLのBETWEENが使用されている構文を見て、さらに理解を深めましょう。

MySQLのBETWEENを使用した例

以下のようなテーブルがある前提で説明を進めます。

animalsテーブル

+---------+-------+------+
| animal  | name  | age  |
+---------+-------+------+
| cat     | Tom   |    5 |
| dog     | Pochi |    8 |
| tiger   | Shima |   10 |
| bird    | Piyo  |    9 |
| lion    | Gao   |   17 |
| hamster | Jiro  |    3 |
+---------+-------+------+

上記のテーブルからageカラムが「1」から「10」までのレコードを出力してみましょう。

BETWEENを含むSELECTステートメント

SELECT * FROM animals WHERE age BETWEEN 1 AND 10;

出力結果

+---------+-------+------+
| animal  | name  | age  |
+---------+-------+------+
| cat     | Tom   |    5 |
| dog     | Pochi |    8 |
| tiger   | Shima |   10 |
| bird    | Piyo  |    9 |
| hamster | Jiro  |    3 |
+---------+-------+------+
5 rows in set (0.00 sec)

BETWEENの範囲に「1〜10」と指定したため、ageカラムに「1〜10」の値が入っているレコードが抽出できました。

文字列の範囲についても見てみましょう。

BETWEENを含むSELECTステートメント

SELECT * FROM animals WHERE animal BETWEEN 'a' AND 'e';

出力結果

+--------+-------+------+
| animal | name  | age  |
+--------+-------+------+
| cat    | Tom   |    5 |
| dog    | Pochi |    8 |
| bird   | Piyo  |    9 |
+--------+-------+------+
3 rows in set (0.00 sec)

範囲に「BETWEEN ‘a’ AND ‘e’」と指定することで「頭文字がaからeの直前までの範囲のレコード」を抽出することができます。

ポテパンダの一言メモ

文字列の範囲指定における注意点は「BETWEEN ‘a’ AND ‘e’」と指定しても「頭文字eのレコード」は抽出されないということです。文字列は指定した最大値の直前の文字までが範囲となることに注意しましょう。もし「頭文字e」までを含めたい場合には「BETWEEN ‘a’ AND ‘f’」と指定する必要があります。

【関連記事】
▶︎【テーブル編集】MySQLのALTER TABLEの使い方まとめ
▶︎【WHERE DATE句】MySQL 日付・時間処理関数の使い方まとめ10選

MySQLでBETWEENハンズオンにトライ

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

準備

まずは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を使用する準備は完了しました。

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

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

CREATE TABLE country_population(country VARCHAR(20), population INT);
Query OK, 0 rows affected (0.03 sec)
INSERT INTO country_population VALUES ('China', 1357946313),('India', 1224514327),('America', 314551246),('Indonesia', 239870937),('Brazil',194946470),('Pakistan',173593383);
Query OK, 6 rows affected (0.00 sec)

テーブルの状態

SELECT * FROM country_population;
+-----------+------------+
| country   | population |
+-----------+------------+
| China     | 1357946313 |
| India     | 1224514327 |
| America   |  314551246 |
| Indonesia |  239870937 |
| Brazil    |  194946470 |
| Pakistan  |  173593383 |
+-----------+------------+

MySQL BETWEENのシンプルな範囲検索

それでは、最初に見た例のような範囲検索を体験してみましょう。country_populationテーブルから「population」カラムが「150000000〜999999999」の範囲に当たるレコードを抽出します。

BETWEENを含むSELECTステートメント

SELECT * FROM country_population WHERE population BETWEEN 150000000 AND 999999999;

出力結果

+-----------+------------+
| country   | population |
+-----------+------------+
| America   |  314551246 |
| Indonesia |  239870937 |
| Brazil    |  194946470 |
| Pakistan  |  173593383 |
+-----------+------------+
4 rows in set (0.00 sec)

BETWEEN以降に「150000000 AND 999999999」と指定したことで、populationカラムが最小値150000000・最大値999999999の範囲に当たるレコードの抽出ができました。

BETWEENの前に「NOT」をつけ、先ほどと真逆の範囲を対象にレコードを抽出してみましょう。

NOT BETWEENを含むSELECTステートメント

SELECT * FROM country_population WHERE population NOT BETWEEN 150000000 AND 999999999;

出力結果

+---------+------------+
| country | population |
+---------+------------+
| China   | 1357946313 |
| India   | 1224514327 |
+---------+------------+
2 rows in set (0.00 sec)

MySQL BETWEENのシンプルな範囲検索2

次に文字列を指定して範囲検索を行い、結果を出力してみましょう。

WHERE BETWEEN句を含むSELECTステートメント

SELECT * FROM country_population WHERE country BETWEEN 'A' AND 'D';

出力結果

+---------+------------+
| country | population |
+---------+------------+
| China   | 1357946313 |
| America |  314551246 |
| Brazil  |  194946470 |
+---------+------------+
3 rows in set (0.00 sec)

BETWEEN以降に「’A’ AND ‘D’」と指定したことで、countryカラムから「頭文字がA〜C(Dの1つ手前のアルファベット)」の範囲に当たるレコードの抽出ができました。

まとめ

今回の記事では、MySQL BETWEENの主な機能をご紹介しつつ、実際に使用する方法をハンズオンで体験していきました。使ってみると非常に簡単なBETWEENですが、範囲検索を行う際には非常に便利です。ぜひ、範囲検索を行う際に利用してみましょう。

【関連記事】
▶︎MySQLのleft joinサンプルコード onとusingの結合条件指定の違いは?
▶︎MySQLのUPDATEの基本とデータベースに格納された値を効率よく変更する方法

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

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

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

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

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

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

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

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

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

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

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