SQLで範囲を指定するならBETWEEN演算子を使おう!

SQLで条件を絞る際に、特定の範囲を指定して検索をしたい時があると思います。

このような場合は、SQLのBETWEEN演算子を使いましょう!

本記事では、BETWEEN演算子の使い方から具体的な使用ケースまでを詳しく解説しています。

BETWEEN演算子とは

BETWEEN演算子は「~の間に」という単語の意味を持つように、指定した範囲のレコードを取得することができます。WHERE句と一緒に使われることが多いです。

BETWEEN演算子の使い方

BETWEEN演算子の基本構文は下記のようになります。

SQL
SELECT カラム名
FROM テーブル名
WHERE カラム名 BETWEEN 下限値 AND 上限値;

BETWEEN 下限値 AND 上限値と記載の部分によって、下限値以上かつ上限値以下である値を検索します。下限値や上限値と指定している値(つまり、境界となる値)も含まれることがポイントです。

BETWEEN演算子を使わない書き方

BETWEEN演算子を使わずに、全く同じことを実現するクエリを書くことができます。

それが下記のように不等号を使って書く方法です。

SQL
SELECT カラム名
FROM テーブル名
WHERE カラム名 >= 下限値 AND カラム名 <= 上限値;

BETWEENを使った方が簡潔に書けるため、できるだけBETWEENを使うことをおすすめします。

境界値を含まない書き方

BETWEEN演算子を使うと境界値を含んでしまいます。よって、境界値を含みたくないのであれば、BETWEENを使わない書き方にする必要があります。

SQL
SELECT カラム名
FROM テーブル名
WHERE カラム名 > 下限値 AND カラム名 < 上限値;

これで実現できます。

カラム名 > 下限値によって、下限値よりも大きいという条件を指定し、カラム名 < 上限値によって上限値よりも小さいという条件を指定しています。

サンプルデータ

具体例を見ていく上で、今回も下記のusersテーブルをサンプルデータとして使用していきます。

idnameageaddresscreated_at
1山田25東京都2021-06-10
2鈴木34神奈川県2021-12-18
3佐藤28北海道2021-06-16
4大野45大阪府2020-05-20
5小池56京都府2021-04-02
6近藤23東京都2021-03-23
7佐々木37千葉県2021-01-06
8宮田31福岡県2020-08-12
usersテーブル

数値の範囲指定をしてみよう

では、具体例を見ていきましょう。まずはBETWEENを使って数値の範囲指定を行います。

検索クエリ

usersテーブルから年齢が25歳以上、34歳以下の人を取得する

SQL
SELECT *
FROM users
WHERE age BETWEEN 25 AND 34;

実行結果

idnameageaddresscreated_at
1山田25東京都2021-06-10
2鈴木34神奈川県2021-12-18
3佐藤28北海道2021-06-16
6近藤23東京都2021-03-23
8宮田31福岡県2020-08-12

ageカラムの値が25以上かつ34以下のレコードを取得することができました。

日付の範囲指定をしてみよう

次に、BETWEENを使った日付の範囲指定を行います。

検索クエリ

usersテーブルから2021年の1月1日から2021年6月30日までの間に作成されたレコードを取得する

SQL
SELECT *
FROM users
WHERE created_at BETWEEN '2021-01-01' AND '2021-06-30';

実行結果

idnameageaddresscreated_at
1山田25東京都2021-06-10
3佐藤28北海道2021-06-16
5小池56京都府2021-04-02
6近藤23東京都2021-03-23
7佐々木37千葉県2021-01-06

BETWEENの否定形

BETWEEN演算子はNOT演算子と組み合わせることで否定形にできます。

基本構文

SQL
SELECT カラム名
FROM テーブル名
WHERE カラム名 NOT BETWEEN 下限値 AND 上限値;

検索クエリ

usersテーブルから20代だけを除外したレコードを取得する

SQL
SELECT *
FROM users
WHERE age NOT BETWEEN 20 AND 29;

実行結果

idnameageaddresscreated_at
2鈴木34神奈川県2021-12-18
4大野45大阪府2020-05-20
5小池56京都府2021-04-02
7佐々木37千葉県2021-01-06
8宮田31福岡県2020-08-12

20~29の範囲をNOTを使って否定すれば、20代以外を取得することができます。

内容のまとめ

  • BETWEENは指定した範囲のレコードを取得することができる
  • BETWEENは基本的にはWHERE句と併用する
  • WHERE カラム名 BETWEEN 下限値 AND 上限値と書くことで、下限値以上かつ上限値以下である値を検索できる
  • BETWEENを使わなくても、不等号を使ってカラム名 >= 下限値 AND カラム名 <= 上限値と書けば同じ結果を得られる
  • BETWEENは数値や日付データを扱う際に使うことが多い
  • NOTを組み合わせることでBETWEENの否定形を作ることができる