MySQLのWHERE BETWEEN句を使ったことはあるでしょうか。最初のうちはシンプルなSELECTステートメントで精一杯かもしれませんが、少し余裕が出てきたタイミングでぜひ使用してみることをおすすめします。今回の記事では、MySQL WHERE BETWEEN句の主な機能をご紹介しつつ、実際に使用する方法をハンズオンで体験していきましょう。
- MySQL WHERE BETWEEN句は範囲検索をする際に活躍
- MySQLを使ったWHERE BETWEEN句のハンズオン
MySQL WHERE BETWEEN句とは
MySQLのWHERE BETWEEN句には指定した範囲に該当するレコードを出力する機能があります。指定できるものには文字列・数値・日付などがあり、範囲検索をする際に便利です。
実際にMySQL WHERE BETWEEN句の構文を見てみましょう。
SELECT カラム名 FROM テーブル名 WHERE カラム名 BETWEEN 最小値 AND 最大値;
BETWEENの後に「最小値」と「最大値」を指定することで、その範囲に該当するレコードを出力してくれます。
すでにSELECTステートメントの構文を知っている方であればWHERE BETWEEN句の加わる構文も難しくはないはず。実際にMySQLのWHERE BETWEEN句が使用されている構文を見て、さらに認識を深めましょう。
以下のようなテーブルがあることを前提とします。
foodsテーブル
+--------+-------+ | name | price | +--------+-------+ | Banana | 100 | | Apple | 200 | | Bread | 400 | | Cookie | 240 | | Beef | 1000 | | Onion | 300 | +--------+-------+
上記のテーブルからpriceカラムが「100」または「400」までのレコードを出力してみましょう。
WHERE BETWEEN句を含むSELECTステートメント
SELECT * FROM foods WHERE price BETWEEN 100 AND 400;
出力結果
+--------+-------+ | name | price | +--------+-------+ | Banana | 100 | | Apple | 200 | | Bread | 400 | | Cookie | 240 | | Onion | 300 | +--------+-------+ 5 rows in set (0.00 sec)
WHERE BETWEEN句の範囲に「100〜400」と指定することで、priceカラムに「100〜400」の値が入っているレコードを出力できました。
次に文字列を範囲に指定してみましょう。
WHERE BETWEEN句を含むSELECTステートメント
SELECT * FROM foods WHERE name BETWEEN 'A' AND 'C';
出力結果
+--------+-------+ | name | price | +--------+-------+ | Banana | 100 | | Apple | 200 | | Bread | 400 | | Beef | 1000 | +--------+-------+ 4 rows in set (0.00 sec)
「BETWEEN ‘A’ AND ‘C’」と指定することで「頭文字がAからCの直前までの範囲のレコード」を出力することができます。
【関連作品】
▶︎MySQLのlimitのサンプルコード集 offset指定や効率的な件数取得方法は?
▶︎SQL having 集約関数の絞り込み whereよりもレスポンスが遅い理由とは?
MySQLでWHERE BETWEEN句ハンズオンにトライ
こちらでは、実際にMySQLというデータベースを使用してWHERE 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を使用する準備は完了しました。
ベースとなるテーブルの作成
次にベースとなるテーブルを作成しましょう。
mysql> CREATE TABLE students(name VARCHAR(50), age INT, birthday DATE); Query OK, 0 rows affected (0.03 sec) mysql> INSERT INTO students VALUES('Tanaka Taro', 12, '2007-12-20'),('Hamano Yoko', 18, '2001-01-12'),('Tada Tuyoshi', 15, '2004-05-04'),('Kotaki Saeko', 23, '1996-11-28'),('Rokuta Hajime', 9, '2010-10-23'),('Sato Yuka', 26, '1993-06-18'); Query OK, 6 rows affected (0.00 sec) Records: 6 Duplicates: 0 Warnings: 0
テーブルの状態
mysql> SELECT * FROM vegetables; +---------------+------+------------+ | name | age | birthday | +---------------+------+------------+ | Tanaka Taro | 12 | 2007-12-20 | | Hamano Yoko | 18 | 2001-01-12 | | Tada Tuyoshi | 15 | 2004-05-04 | | Kotaki Saeko | 23 | 1996-11-28 | | Rokuta Hajime | 9 | 2010-10-23 | | Sato Yuka | 26 | 1993-06-18 | +---------------+------+------------+
MySQL WHERE BETWEEN句を使った簡単な範囲検索
それでは、最初に見た例のような範囲検索を体験してみましょう。studentsテーブルから「10〜20歳」の範囲に当たるレコードを抽出します。
WHERE BETWEEN句を含むSELECTステートメント
mysql> SELECT * FROM students WHERE age BETWEEN 10 AND 20;
出力結果
+--------------+------+------------+ | name | age | birthday | +--------------+------+------------+ | Tanaka Taro | 12 | 2007-12-20 | | Hamano Yoko | 18 | 2001-01-12 | | Tada Tuyoshi | 15 | 2004-05-04 | +--------------+------+------------+ 3 rows in set (0.00 sec)
BETWEEN以降に「10 AND 20」と指定したことで、最小値10・最大値20の範囲に当たるレコードの抽出ができました。
ちなみにBETWEENの前に「NOT」をつけることで、指定範囲以外のレコードを出力することも可能です。
WHERE NOT BETWEEN句を含むSELECTステートメント
mysql> SELECT * FROM students WHERE age NOT BETWEEN 10 AND 20;
出力結果
+---------------+------+------------+ | name | age | birthday | +---------------+------+------------+ | Kotaki Saeko | 23 | 1996-11-28 | | Rokuta Hajime | 9 | 2010-10-23 | | Sato Yuka | 26 | 1993-06-18 | +---------------+------+------------+ 3 rows in set (0.00 sec)
MySQL WHERE BETWEEN句を使った簡単な範囲検索2
次に日付を指定して範囲検索を行い、結果を出力してみましょう。
WHERE BETWEEN句を含むSELECTステートメント
mysql> SELECT * FROM students WHERE birthday BETWEEN '2000-01-01' AND '2009-01-01';
出力結果
+--------------+------+------------+ | name | age | birthday | +--------------+------+------------+ | Tanaka Taro | 12 | 2007-12-20 | | Hamano Yoko | 18 | 2001-01-12 | | Tada Tuyoshi | 15 | 2004-05-04 | +--------------+------+------------+ 3 rows in set (0.00 sec)
BETWEEN以降に「’2000-01-01′ AND ‘2009-01-01’」と指定したことで、birthdayカラムが「2000年1月1日」から「2009年1月1日」の範囲に当たるレコードの抽出ができました。
MySQL WHERE BETWEEN句を使った簡単な範囲検索3
最後に文字列の範囲検索を行い、出力を行ってみましょう。
WHERE BETWEEN句を含むSELECTステートメント
mysql> SELECT * FROM students WHERE name BETWEEN 'H' AND 'T';
出力結果
+---------------+------+------------+ | name | age | birthday | +---------------+------+------------+ | Hamano Yoko | 18 | 2001-01-12 | | Kotaki Saeko | 23 | 1996-11-28 | | Rokuta Hajime | 9 | 2010-10-23 | | Sato Yuka | 26 | 1993-06-18 | +---------------+------+------------+ 4 rows in set (0.00 sec)
BETWEEN以降に「’H’ AND ‘T’」と指定したことで、nameカラムから「頭文字がH〜S(Tの1つ手前のアルファベット)」の範囲に当たるレコードの抽出ができました。
まとめ
今回の記事では、MySQL WHERE BETWEEN句の主な機能をご紹介しつつ、実際に使用する方法をハンズオンで体験していきました。使ってみると非常に簡単なWHERE BETWEEN句ですが、範囲検索を行う際には非常に便利です。ぜひ、範囲検索を行う際に利用してみましょう。
【関連記事】
▶︎MySQL Insert サンプルコード集 一文で一括挿入する方法とは?
▶︎【使いこなせる?】SQLのEXISTS文の使い方を初心者向けに解説
文字列の範囲指定で分かったように「BETWEEN ‘A’ AND ‘C’」と指定すると、「頭文字Cのレコード」は出力されません。もし「頭文字C」までを含めたい場合には「BETWEEN ‘A’ AND ‘D’」と指定する必要があることを覚えておきましょう。