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の直前までの範囲のレコード」を抽出することができます。
【関連記事】
▶︎【テーブル編集】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の基本とデータベースに格納された値を効率よく変更する方法
文字列の範囲指定における注意点は「BETWEEN ‘a’ AND ‘e’」と指定しても「頭文字eのレコード」は抽出されないということです。文字列は指定した最大値の直前の文字までが範囲となることに注意しましょう。もし「頭文字e」までを含めたい場合には「BETWEEN ‘a’ AND ‘f’」と指定する必要があります。